Pandas Dataframe - (列重新结构)
Pandas Dataframe - (Column re structure)
我有一个包含 n 列的数据框。这些包含字母,一列包含的字母数量各不相同,并且一个字母可以出现在不同数量的列中。我需要 pandas 数据框的代码将 sheet 转换为以字母开头的列,行应包含该字母所在的列数。
Link to example problem
-
ABCDEF
ABDE。 11 1
英国广播公司 -> 2 2
欧洲足球联合会。 3 3
4 4
图片更好地描述了我的问题。预先感谢您的帮助。
使用 DataFrame.stack
with DataFrame.reset_index
for reshape, then DataFrame.sort_values
并聚合 list
s,最后由构造函数使用转置创建 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)
我有一个包含 n 列的数据框。这些包含字母,一列包含的字母数量各不相同,并且一个字母可以出现在不同数量的列中。我需要 pandas 数据框的代码将 sheet 转换为以字母开头的列,行应包含该字母所在的列数。
Link to example problem
-
ABCDEF
ABDE。 11 1 英国广播公司 -> 2 2 欧洲足球联合会。 3 3 4 4
图片更好地描述了我的问题。预先感谢您的帮助。
使用 DataFrame.stack
with DataFrame.reset_index
for reshape, then DataFrame.sort_values
并聚合 list
s,最后由构造函数使用转置创建 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)