Pandas实现:为每个分组添加总计行并置于分组首行
问题:为Pandas分组添加总计行并置于分组首行
数据示例
owner player val1 val2 val3 A x 5.60 3.18 0.76 A y 12.08 15.95 -0.24 A z 0.03 0.05 -0.41 B x 0.02 0.01 2.06 B z 2.36 2.37 0.00 C x 0.16 0.15 0.05 C y 0.72 0.75 -0.04 D x 0.33 0.56 -0.41
期望输出
为每个owner分组计算数值列总计,将总计行放在分组第一行:
owner player val1 val2 val3 A total 17.71 19.18 0.11 A x 5.60 3.18 0.76 A y 12.08 15.95 -0.24 A z 0.03 0.05 -0.41 B total 2.38 2.38 2.06 B x 0.02 0.01 2.06 B z 2.36 2.37 0.00 C total 0.88 0.90 0.01 C x 0.16 0.15 0.05 C y 0.72 0.75 -0.04 D total 0.33 0.56 -0.41 D x 0.33 0.56 -0.41
尝试过的代码及问题
使用以下代码后,总计行位置不对,player列被字符串拼接,还产生多层索引:
def lambda_t(x): df = x.sort_values(['owner']).drop(['owner'],axis=1) df.loc['total'] = df.sum() return df df.groupby(['owner']).apply(lambda_t)
异常输出:
owner player val1 val2 val3 A 0 x 5.60 3.18 0.76 1 y 12.08 15.95 -0.24 2 z 0.03 0.05 -0.41 total xzy 17.71 19.18 0.11 .....
删除多层索引后,player值仍异常,位置也未调整:
df.groupby(['owner']).apply(lambda_t).droplevel(level=1)
输出:
owner player val1 val2 val3 A x 5.60 3.18 0.76 A y 12.08 15.95 -0.24 A z 0.03 0.05 -0.41 A xzy 17.71 19.18 0.11
解决方案
通过以下代码可实现需求,适配多数值列场景:
import pandas as pd # 构造示例数据(替换为你的真实数据读取逻辑) data = { 'owner': ['A','A','A','B','B','C','C','D'], 'player': ['x','y','z','x','z','x','y','x'], 'val1': [5.60,12.08,0.03,0.02,2.36,0.16,0.72,0.33], 'val2': [3.18,15.95,0.05,0.01,2.37,0.15,0.75,0.56], 'val3': [0.76,-0.24,-0.41,2.06,0.00,0.05,-0.04,-0.41] } df = pd.DataFrame(data) def add_total_row(group): # 自动筛选数值列计算总和 total_vals = group.select_dtypes(include='number').sum() # 构造总计行 total_row = pd.DataFrame({ 'owner': [group['owner'].iloc[0]], 'player': ['total'], **total_vals.to_dict() }) # 合并总计行与原分组数据,总计行前置 return pd.concat([total_row, group], ignore_index=True) # 分组应用函数,生成最终结果 result = df.groupby('owner', group_keys=False).apply(add_total_row).reset_index(drop=True) print(result)
代码说明
select_dtypes(include='number')自动识别所有数值列,无需手动指定列名,适配你25个数值列的场景pd.concat([total_row, group])确保总计行排在分组最前端group_keys=False避免生成多层索引,reset_index(drop=True)得到结构清晰的最终DataFrame
内容的提问来源于stack exchange,提问作者Geosphere
相关产品推荐
相关产品推荐

