熊猫-将重复的行合并为一个

时间:2019-02-04 19:45:10

标签: python pandas

所以下面我有一个DataFrame的示例,在整个示例中,将有多个实例,例如SALES TAX EXPENSE行,如果有重复,则需要将其转换为一行,其中Trans_Amt的总数应为Trans_Type C-Trans_TypeD。

因此,例如在此DF中,“销售税支出”应该只有一行,而总数应为-36239.65。

在整个DF中,使用多个不同的ActName多次发生。我正在寻找最有效的方法来进行这种转换并将其应用于发生这种情况的任何实例。

谢谢!

              ActName  ActCode Trans_Type   Trans_Amt
0               SALES      401          C  2082748.85
1   SALES TAX EXPENSE      407          C   100000.00
30          DISCOUNTS      405          D     -654.59
31  SALES TAX EXPENSE      407          D   136239.65

1 个答案:

答案 0 :(得分:2)

按列对数据进行分组,然后将差异分配给Amt。然后删除重复项。

df['Trans_Amt'] = df.groupby(['ActName','ActCode']).Trans_Amt.apply(lambda x: x.diff(periods=-1)).combine_first(df['Trans_Amt'])
df.drop_duplicates('ActName')

    ActName             ActCode Trans_Type  Trans_Amt
0   SALES               401     C           2082748.85
1   SALES TAX EXPENSE   407     C           -36239.65
30  DISCOUNTS           405     D           -654.59

编辑:基于后续问题。如果应该与上一行有所不同,请尝试

df['Trans_Amt'] = df.groupby(['ActName','ActCode']).Trans_Amt.apply(lambda x: x.diff()).combine_first(df['Trans_Amt'])
df.drop_duplicates('ActName', keep='last')

    ActName             ActCode Trans_Type  Trans_Amt
0   SALES               401     C           2082748.85
30  DISCOUNTS           405     D           -654.59
31  SALES TAX EXPENSE   407     D           36239.65