如何为重复Account ID生成收入总和新列?groupby代码生成空列求助
问题原因
你遇到的空列问题核心是分组求和后的索引与原DataFrame索引不匹配:df.groupby('Account ID')['Revenue'].sum() 返回的是一个以Account ID为索引的Series,仅包含每个账户的唯一行;而原DataFrame的索引是原始行号,两者无法对齐,导致赋值后原DataFrame的大部分位置找不到对应值,最终出现空列。
解决方案
以下是三种可行的解决方法,按需选择:
方法1:用transform直接生成对应列(最简便)
transform方法会自动将分组计算的结果广播到原DataFrame的每一行,完美对齐索引:
df['Total_Revenue'] = df.groupby('Account ID')['Revenue'].transform('sum')
方法2:分组求和后合并回原DataFrame
如果需要同时处理多个分组统计字段,用merge更灵活:
# 先计算每个账户的总收入,重置索引转为DataFrame sum_df = df.groupby('Account ID')['Revenue'].sum().reset_index(name='Total_Revenue') # 左合并回原DataFrame,保留所有原始行 df = df.merge(sum_df, on='Account ID', how='left')
方法3:用map映射字典
先把分组结果转成字典,再通过Account ID映射到原DataFrame:
# 生成账户-总收入的字典 revenue_dict = df.groupby('Account ID')['Revenue'].sum().to_dict() # 映射到原列 df['Total_Revenue'] = df['Account ID'].map(revenue_dict)
内容的提问来源于stack exchange,提问作者Shah_z51
相关产品推荐
相关产品推荐

