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

如何用Python Pandas按GroupID分组新增min_avg等三列?

用Pandas按分组新增统计列的实现方案

没问题,这在Pandas里用groupby结合transform方法就能完美实现,正好满足你需要给每行填充对应组内统计值的需求。下面是具体的代码步骤和解释:

步骤1:构造原始数据

先把你提供的示例数据转换成Pandas DataFrame:

import pandas as pd

data = {
    'avg': [25.5, 26.7, 25.8, 53.5, 29.3, 27.7],
    'groupId': [1016, 1048, 1016, 1048, 1064, 1016]
}
df = pd.DataFrame(data)

步骤2:计算分组统计列

我们用groupby('groupId')对数据按组分组,然后用transform方法把组内的统计结果映射回每一行(这一步是关键,能保证每个组的所有行都填充对应的组内统计值):

# 新增min_avg:同一groupId下avg的最小值
df['min_avg'] = df.groupby('groupId')['avg'].transform('min')

# 新增max_avg:同一groupId下avg的最大值
df['max_avg'] = df.groupby('groupId')['avg'].transform('max')

# 新增group_average:每行min_avg和max_avg的平均值
df['group_average'] = (df['min_avg'] + df['max_avg']) / 2

查看最终结果

运行完上面的代码后,打印df就能得到符合需求的结果:

avg  groupId  min_avg  max_avg  group_average
0  25.5     1016     25.5     27.7           26.6
1  26.7     1048     26.7     53.5           40.1
2  25.8     1016     25.5     27.7           26.6
3  53.5     1048     26.7     53.5           40.1
4  29.3     1064     29.3     29.3           29.3
5  27.7     1016     25.5     27.7           26.6

小补充说明

注意:你给出的期望结果中groupId=1048的min_avg写的是26.3,但根据你提供的原始数据,该组的avg值是26.7和53.5,所以实际计算出来的min_avg是26.7,对应的group_average是40.1。如果是原始数据输入有误,调整数据后重新运行代码即可得到正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 16:32:33