首页 > 解决方案 > Pandas - 将重复的行合并为一个

问题描述

因此,下面我有一个 DataFrame 示例,其中贯穿始终,将有多个实例,例如 SALES TAX EXPENSE 行,如果有重复,则需要将其转换为 Trans_Amt 总数应为 Trans_Type C 的一行 - Trans_Type D。

因此,例如在这个 DF 中,SALES TAX EXPENSE 应该只有一行,总数应该是 -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

标签: pythonpandas

解决方案


按列对数据进行分组并将差异分配给 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

推荐阅读