我有一个大小为(2481430,2)的数据框,我想按B列进行分组,而无需汇总列Codex。
我使用.pivot并返回'索引2025068794超出轴0的大小2024681638的范围'
codex B
0 D0003 20
1 D0004 21
2 D0003 21
3 D0001 20
4 D0002 20
5 D0005 20
df.pivot(columns = 'B', values = 'codex')
这是预期的结果
20 21
0 D0003 D0004
1 D0001 D0003
2 D0002 NaN
3 D0005 NaN
答案 0 :(得分:2)
groupby
+ pd.concat
您可以使用groupby
,然后将pd.Series
对象与规范化索引相连:
grouper = df.groupby('B')['codex']
res = pd.concat((pd.Series(vals.values, name=b) for b, vals in grouper), axis=1)
print(res)
20 21
0 D0003 D0004
1 D0001 D0003
2 D0002 NaN
3 D0005 NaN
答案 1 :(得分:2)
将pandas.pivot
与cumcount
一起用于新索引:
df = pd.pivot(columns = df['B'], values = df['codex'], index= df.groupby('B').cumcount())
print (df)
B 20 21
0 D0003 D0004
1 D0001 D0003
2 D0002 NaN
3 D0005 NaN