python - 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
解决方案
按列对数据进行分组并将差异分配给 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 - Scrapy:使用 response.text 提取数据
- python - 将模型的数据输入从 (1, 5) 重塑为 (1, 3000)
- javascript - jQuery拖放+点击图片上传
- azure-cosmosdb - 无法为 cosmos db 集合中的 id 列设置用户定义的值
- matlab - 绘制分类 x 轴
- sql - 根据 SQL 中的连续标志对行进行分组 (Redshift)
- django-rest-framework - 如何在邮递员中传递数组
- redis - 清除缓存时删除redis键
- java - 更改 RecyclerView 所选项目背景
- java - 合并 dex 档案时出错:程序类型已存在:org.apache.commons.io.Charsets