Pandas中按类别透视并去重交易ID后求和的实现方法
用pivot_table还是groupby实现去重后透视求和?
当然两种方法都能实现你的需求!关键是要先完成按Transaction_ID去重的步骤,不然直接用你现有的pivot_table代码会把重复交易的Transaction_Row重复累加,不符合要求。
方法一:先去重再用pd.pivot_table
因为同一个Transaction_ID对应的Transaction_Row和Category是一致的,我们可以先把重复的交易记录去掉,再做透视求和:
import pandas as pd import numpy as np # 第一步:按Transaction_ID去重,保留每条交易的唯一记录 df_unique = df.drop_duplicates(subset=['Transaction_ID']) # 第二步:用pivot_table按Category透视,对Transaction_Row求和 pivot_result = pd.pivot_table( df_unique, index=["Category"], values=["Transaction_Row"], aggfunc=np.sum )
这样处理后,Transaction_ID=123的-1只会被统计一次,最终的透视结果就符合你的要求了。
方法二:用groupby直接完成
如果你不想单独生成去重后的DataFrame,也可以用嵌套groupby一步到位:
# 先按Category+Transaction_ID分组,取每组的Transaction_Row(因为同交易的数值一致,用first/max/min都可以) # 再按Category汇总求和 groupby_result = df.groupby(['Category', 'Transaction_ID'])['Transaction_Row'].first().groupby('Category').sum()
这种方式更紧凑,本质是先完成了交易级别的去重,再做分类求和。
简单来说:如果偏好透视表的输出格式,先去重再用pivot_table完全可行;如果想写更简洁的代码,嵌套groupby是不错的选择,两种方法都能得到正确结果。
内容的提问来源于stack exchange,提问作者jeangelj
相关产品推荐
相关产品推荐

