Pandas Dataframe - (列重新结构)

Pandas Dataframe - (Column re structure)

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

Link to example problem

  1.   ABCDEF
    

ABDE。 11 1 英国广播公司 -> 2 2 欧洲足球联合会。 3 3 4 4

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

使用 DataFrame.stack with DataFrame.reset_index for reshape, then 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 for counter and reshape by 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)