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

如何将DataFrame中各X分组的首个元素替换为对应均值?

按分组替换首个元素的Y值为分组均值

给定数据

我们有如下Pandas DataFrame:

import pandas as pd

df = pd.DataFrame(
    {'X': ['a', 'a', 'b', 'a', 'b'],
     'Y': [2, 4, 8, 10, 5]})

显示结果:

X   Y
0   a   2
1   a   4
2   b   8
3   a   10
4   b   5

需求

按X列分组,将每个分组的首个元素的Y值替换为该分组的均值,预期输出:

X   Y
0   a   5.33
1   a   4.00
2   b   6.50
3   a   10.00
4   b   5.00

解决方案

完整实现代码

import pandas as pd

df = pd.DataFrame(
    {'X': ['a', 'a', 'b', 'a', 'b'],
     'Y': [2, 4, 8, 10, 5]})

# 1. 计算每个分组的Y列均值
group_means = df.groupby('X')['Y'].mean()

# 2. 给每个分组内的行添加组内序号(从0开始)
df['group_rank'] = df.groupby('X').cumcount()

# 3. 替换每组首个元素(group_rank=0)的Y值为对应分组均值
df.loc[df['group_rank'] == 0, 'Y'] = df.loc[df['group_rank'] == 0, 'X'].map(group_means)

# 4. 格式化Y列为两位小数,匹配预期输出格式
df['Y'] = df['Y'].round(2)

# 移除临时辅助列
df = df.drop('group_rank', axis=1)

print(df)

代码说明

  • groupby('X')['Y'].mean():按X分组计算每组Y的平均值,得到一个以X取值为索引的Series,存储对应分组的均值。
  • groupby('X').cumcount():为每个分组内的行生成从0开始的连续序号,每组的第一行序号为0,这是我们要定位的目标行。
  • df.loc[df['group_rank'] == 0, 'Y'] = ...:通过布尔索引定位所有分组的首个元素,用map方法根据X的值匹配对应的分组均值,完成替换。
  • round(2):将Y列数值保留两位小数,让输出格式和预期一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 03:33:31