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

用Pandas分组筛选后为何无法获取每组指定列的最大值?

问题分析与解决方法

错误原因

你之前的操作中,df.groupby(['team']).apply(lambda g: g[g['another_variable'] == 1])返回的是一个多层索引的DataFrame,此时直接调用.variable.min()是对整个variable列取最小值,而非按每个team分组计算,所以只会得到一个单一值。

正确实现方式

方法1:在apply内部完成分组计算

直接在lambda函数里对每个分组筛选后取variable的最大值,这样apply会返回每个组对应的结果,最终得到一个以team为索引的Series:

result = df.groupby('team').apply(lambda g: g[g['another_variable'] == 1]['variable'].max())
print(result)
# 输出:
# team
# A    10
# B     3
# dtype: int64

方法2:先筛选再分组(更高效)

先过滤出another_variable == 1的行,再按team分组取variable的最大值,这种方式比apply更高效,尤其是处理大数据集时:

result = df[df['another_variable'] == 1].groupby('team')['variable'].max()
print(result)
# 输出同上

方法3:使用agg结合条件

通过groupby.agg方法,指定条件计算逻辑,同样能得到每个组的目标值:

result = df.groupby('team').agg(
    max_var=('variable', lambda x: x[df.loc[x.index, 'another_variable'] == 1].max())
)
print(result)
# 输出:
#       max_var
# team         
# A          10
# B           3

如果之后需要计算这些最大值的整体最大值,直接对结果调用.max()即可:

overall_max = result.max()
print(overall_max)  # 输出10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 01:45:46