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

按平均值筛选最小均值分组的Pandas实现方法

按分组筛选平均值最小的数据集行

针对你的需求,这里提供几种简洁的实现方式,以你给出的示例数据为例:

首先确认示例数据(原代码中C列的00会被Python解析为0,这里修正为0避免歧义):

import pandas as pd

df = pd.DataFrame({'ID':[1,1,2,2,3,3], 
                   'YEAR' : [2011,2012,2012,2013,2013,2014], 
                   'V': [0,1,1,0,1,0],
                   'C':[0,11,22,33,44,55]})

方法一:先计算分组均值,再筛选目标分组

  1. 按ID分组计算YEAR列的均值,得到各分组的均值映射
  2. 找出均值最小的ID(支持多个分组均值同为最小值的情况)
  3. 从原数据中筛选出这些ID对应的所有行
# 计算各ID对应的YEAR均值
group_means = df.groupby('ID')['YEAR'].mean()
# 获取均值最小的所有ID
min_mean_ids = group_means[group_means == group_means.min()].index
# 筛选原数据
result = df[df['ID'].isin(min_mean_ids)]
print(result)

输出结果:

ID  YEAR  V   C
0   1  2011  0   0
1   1  2012  1  11

方法二:用transform结合布尔索引一步完成

利用transform将分组均值广播到每一行,直接通过布尔索引筛选符合条件的行:

# 计算每行所属分组的YEAR均值,筛选均值等于全局最小均值的行
result = df[df.groupby('ID')['YEAR'].transform('mean') == df.groupby('ID')['YEAR'].mean().min()]
print(result)

方法三:使用groupby的filter方法

filter可以对每个分组进行条件判断,直接保留满足条件的分组:

# 先获取全局最小的分组均值
min_mean = df.groupby('ID')['YEAR'].mean().min()
# 筛选出均值等于最小值的分组
result = df.groupby('ID').filter(lambda x: x['YEAR'].mean() == min_mean)
print(result)

以上三种方法都能实现需求,且都支持多个分组均值同为最小值的场景,会保留所有符合条件的分组数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:45:56