减去值取决于Pandas上的多个关键列

时间:2019-12-24 05:00:32

标签: python pandas dataframe

我尝试对A和B相同的每一行减去C列中的所有值。

我有:

 A          B          C
Car        Wheel      4
Car        Wheel      2
Plane      Motor      -10
Plane      Motor      -5
Plane      Wheel      12

我需要:

 A          B          C
Car        Wheel    4-2 = 2
Plane      Motor   -10-(-5) = -5
Plane      Wheel      12

我实际上与df.groupby(['A','B'])。sum()有相似之处,问题是我没有找到减法的等效项... pd.sub似乎用于数据帧间操作,而不仅用于一列。

1 个答案:

答案 0 :(得分:2)

您可以汇总sum,仅汇总-1的多个重复值,因此输出为汇总减法:

print (df.assign(C = np.where(df.duplicated(['A','B']), -1, 1) * df.C))
       A      B   C
0    Car  Wheel   4
1    Car  Wheel  -2
2  Plane  Motor -10
3  Plane  Motor   5
4  Plane  Wheel  12

df1 = (df.assign(C = np.where(df.duplicated(['A','B']), -1, 1) * df.C)
         .groupby(['A','B'], as_index=False)['C'].sum())
print (df1)
       A      B   C
0    Car  Wheel   2
1  Plane  Motor  -5
2  Plane  Wheel  12