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

如何实现Pandas中类似idxmin的均值筛选功能?

解决方案

方法1:用transform广播组内均值,再筛选

这是最直接的实现方式,先给每一行添加上对应unique id组的x列均值,再筛选x等于该均值的行:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'unique id': [1,1,1,2,2,2],
    'x': [1,2,3,1,2,3],
    'y': [2,3,4,2,3,4]
})

# 计算每个组的x均值,广播到每行
df['x_group_mean'] = df.groupby('unique id')['x'].transform('mean')
# 筛选x等于组均值的行,删除辅助列
filtered_df = df[df['x'] == df['x_group_mean']].drop('x_group_mean', axis=1)
print(filtered_df)

输出结果:

unique id  x  y
1          1  2  3
4          2  2  3

方法2:修正你的merge写法

你之前的merge操作出错,是因为没把均值序列转成带明确列名的DataFrame,匹配逻辑也有误。正确步骤如下:

# 计算组均值,转成带列名的DataFrame
mean_data = df.groupby('unique id')['x'].mean().reset_index(name='x_mean')
# 合并原数据和均值数据
merged = df.merge(mean_data, on='unique id')
# 筛选x等于均值的行,删除辅助列
filtered_df = merged[merged['x'] == merged['x_mean']].drop('x_mean', axis=1)

补充说明:为什么没有idxmean?

Pandas没有提供idxmean函数,核心原因是均值不一定是原数据中存在的数值(比如某组x为[1,3],均值是2,但原数据里没有这个值),只有当均值恰好出现在原数据的列中时,上面的方法才能筛选到对应行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 00:22:05