通过比较行创建新列

时间:2018-09-25 02:05:39

标签: pandas

我的输入数据是这样的

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

实际数据有十万多行,但始终会分为两行。还有其他列,但它们在组中保持不变。

谢谢

2 个答案:

答案 0 :(得分:3)

您需要的更像是pivot

df.pivot('C','B','A')
Out[209]: 
B   x  y
C       
S1  1  2
S2  3  4

答案 1 :(得分:1)

让我们使用set_indexunstack以及列重命名和展平:

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