数据帧(列重新结构)

2024-10-06 16:12:50 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Link to example problem

enter image description here

  1.   ABCDEF
    

阿布德。11 1 BBCC->;2 2 EFB。3 3 4.4

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


Tags: to数据代码gt数量example字母link
1条回答
网友
1楼 · 发布于 2024-10-06 16:12:50

使用^{}^{}进行重塑,然后使用^{}和聚合list,最后使用转置构造函数创建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

或使用^{}作为计数器,并通过^{}重塑形状:

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)

相关问题 更多 >