Python中如何对DataFrame按组别分组后每3行进行求和计算
解决Pandas按组别分组后每N行求和的问题
你当前的实现是直接对全局索引按每3行分组,没有先做location的组别拆分,也无法保留非数值列的正确取值,当不同location的行数不是3的整数倍时会出现跨location分组的错误。
以下是可直接运行的正确实现:
import pandas as pd # 设定每N行求和 N = 3 # 步骤1:按location分组后,在每组内部生成每N行一个的辅助分组编号 df['group_idx'] = df.groupby('location').cumcount() // N # 步骤2:按location、辅助分组编号+date分组(同个3行组的date取值一致),对数值列求和 result = df.groupby(['location', 'date', 'group_idx'], as_index=False).sum(numeric_only=True) # 步骤3:删除辅助列得到最终结果 result = result.drop('group_idx', axis=1)
如果同3行组内的date取值不统一,可以改用下面的通用写法,自定义非数值列的取值规则:
result = df.groupby(['location', 'group_idx'], as_index=False).agg( date = ('date', 'first'), # 保留每组第一个date,也可按需修改为last等规则 one = ('one', 'sum'), two = ('two', 'sum'), three = ('three', 'sum') )
运行后得到的result和你给出的期望输出完全一致。
内容的提问来源于stack exchange,提问作者Lynn
相关产品推荐
相关产品推荐

