python - Pandas - 将重复的行合并为一行

标签 python pandas

所以下面我有一个 DataFrame 的示例,其中自始至终都会有多个实例,例如销售税费用行,如果存在重复项,则需要将其转换为一行,其中 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

最佳答案

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

关于python - Pandas - 将重复的行合并为一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54523285/

相关文章:

python - 如何使用 Python 3 将 JSON 文件转换为字典

python - Pandas:Groupby 创建具有计数和计数值的表

python - Windows 上 mysql-python 安装错误

python - Pandas : `item` 已被弃用

python - 一种热编码单分类数值列

python - 如何检查 Pandas 数据框中是否存在具有特定列值的行

python - Pandas argsort 如何工作?我如何解释结果?

python - 在 Mac 上安装 pylinkgrammar

python - 多维(子列表到列表)分配

python - 在 Python 中运行 R 脚本