You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何像groupby.agg()一样一步为Pandas添加行聚合列

Pandas 按行批量计算统计量的简洁实现

问题描述

现有如下Pandas DataFrame:

import pandas as pd

df = pd.DataFrame({'ID':[1, 2, 3, 4, 5],
                   '1' :[7, 8, 2, 3, 0],
                   '2' :[1, 0, 4, 9, 9],
                   '3' :[3, 1, 1, 6, 8]})

输出结果:

ID  1  2  3
0   1  7  1  3
1   2  8  0  1
2   3  2  4  1
3   4  3  9  6
4   5  0  9  8

需要为每行添加基于列'1'、'2'、'3'的Av(均值)、Sum(求和)、Count(计数)、Max(最大值)列,当前实现方式如下:

cols = ['1', '2', '3']
df['Av'] = df[cols].mean(axis=1)
df['Sum'] = df[cols].sum(axis=1).fillna(0)
df['Count'] = df[cols].count(axis=1).fillna(0)
df['Max'] = df[cols].max(axis=1).fillna(0)

输出结果:

ID  1  2  3        Av  Sum  Count  Max
0   1  7  1  3  3.666667   11      3    7
1   2  8  0  1  3.000000    9      3    8
2   3  2  4  1  2.333333    7      3    4
3   4  3  9  6  6.000000   18      3    9
4   5  0  9  8  5.666667   17      3    9

请问是否有更简洁的方式,比如像groupby.agg()那样用1-2行代码完成上述操作?

简洁实现方案

当然可以,利用DataFrame.agg()并指定axis=1,就能一次性计算所有需要的行级统计量,再合并到原DataFrame中,一行代码即可完成:

方法一:直接覆盖原DataFrame

cols = ['1', '2', '3']
df = df.join(df[cols].agg(['mean', 'sum', 'count', 'max'], axis=1).rename(columns={'mean':'Av', 'sum':'Sum', 'count':'Count', 'max':'Max'}))

方法二:生成新DataFrame(保留原数据)

如果不想修改原DataFrame,用assign更合适:

cols = ['1', '2', '3']
df_new = df.assign(**df[cols].agg(['mean', 'sum', 'count', 'max'], axis=1).rename(columns={'mean':'Av', 'sum':'Sum', 'count':'Count', 'max':'Max'}))

处理缺失值的情况

如果你的实际数据存在缺失值,只需在agg后链式调用.fillna(0)即可:

df = df.join(df[cols].agg(['mean', 'sum', 'count', 'max'], axis=1)
             .rename(columns={'mean':'Av', 'sum':'Sum', 'count':'Count', 'max':'Max'})
             .fillna(0))

内容的提问来源于stack exchange,提问作者Emi OB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 16:30:58