我的输入数据是这样的
df = pd.DataFrame({'A':[1,2,3,4], 'B':['x','y','x','y'], 'C':['S1','S1','S2','S2']})
A B C
0 1 x S1
1 2 y S1
2 3 x S2
3 4 y S2
我想对“ C”进行分组。然后,对于组中的2行,使用B的值将A的值分配给另一列,并将其减少为一行。
它应该变成
C D_x D_y
0 S1 1 2
1 S2 3 4
实际数据有十万多行,但始终会分为两行。还有其他列,但它们在组中保持不变。
谢谢
答案 0 :(得分:3)
您需要的更像是pivot
df.pivot('C','B','A')
Out[209]:
B x y
C
S1 1 2
S2 3 4
答案 1 :(得分:1)
让我们使用set_index
,unstack
以及列重命名和展平:
dfout = df.set_index(['C','B']).unstack().rename(columns={'A':'D'})
#Python 3.6.0+
dfout.columns = [f'{i}_{j}' for i,j in dfout.columns]
#or
#dfout.columns = dfout.columns.map('_'.join)
print(dfout.reset_index())
输出:
C D_x D_y
0 S1 1 2
1 S2 3 4