【问题标题】:Pandas Dataframe - (Column re structure)Pandas Dataframe - (列重组)
【发布时间】:2021-02-21 17:48:26
【问题描述】:

我有一个包含 n 列的数据框。这些包含字母,一列包含的字母数量各不相同,一个字母可以出现在不同数量的列中。我需要 pandas 数据框的代码来将工作表转换为以字母开头的列,行应包含该字母所在列的编号。

Link to example problem

  1.   ABCDEF
    

ABDE。 11 1 BBCC -> 2 2 EFB。 3 3 4 4

图片更好地描述了我的问题。提前感谢您的帮助。

【问题讨论】:

  • 你能把那张图片转换成实际的文本数据并分享吗?
  • 我尝试将其转换为文本数据。如果这也有帮助,我可以在文本文件中做这个问题吗?
  • 我尝试将其转换为文本数据。如果这也有帮助,我可以在文本文件中做这个问题吗?
  • 你从耶斯瑞尔那里得到了答案。它应该对你有所帮助。

标签: python pandas dataframe gspread


【解决方案1】:

使用DataFrame.stackDataFrame.reset_index 进行整形,然后使用DataFrame.sort_values 和聚合lists,最后通过带有转置的构造函数创建DataFrame

s=df.stack().reset_index(name='a').sort_values('level_1').groupby('a')['level_1'].agg(list)

df1 = pd.DataFrame(s.tolist(), index=s.index).T
print (df1)
a     a  b     c     d     e     f
0     1  1     1     1     3     2
1     3  3     2     4     4  None
2  None  4  None  None  None  None

或使用GroupBy.cumcount 进行计数器并通过DataFrame.pivot 重塑:

df2 = df.stack().reset_index(name='a').sort_values('level_1')

df2['g'] = df2.groupby('a').cumcount()

df2 = df2.pivot('g','a','level_1')
print (df2)
a    a  b    c    d    e    f
g                            
0    1  1    1    1    3    2
1    3  3    2    4    4  NaN
2  NaN  4  NaN  NaN  NaN  NaN

如有必要,最后删除索引和列名:

df1 = df1.rename_axis(index=None)
df2 = df2.rename_axis(index=None, columns=None)

【讨论】:

    猜你喜欢
    • 2020-11-01
    • 2019-07-21
    • 2019-11-26
    • 2014-07-08
    • 2021-09-02
    • 2018-02-14
    • 2020-08-02
    • 1970-01-01
    • 2012-06-13
    相关资源
    最近更新 更多