所以下面我有一个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
答案 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