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

Pandas按Entity和Year分组取最大consumption,相同值时取最大Year

解决方法

你的问题出在groupby(['Entity','Year'])——这样是按实体+年份的组合分组,相当于把每个年份的消费值单独取最大(其实就是自身),根本没实现“找每个实体的最大消费值,再对应最大年份”的目标。

下面给两种高效的实现方式:

方法一:先筛选最大消费值,再取对应最大年份

# 第一步:计算每个实体的消费最大值
entity_max_cons = df.groupby('Entity')['consumption'].max().reset_index(name='max_cons')

# 第二步:匹配原数据中消费值等于最大值的行
matched = df.merge(entity_max_cons, on='Entity')
matched = matched[matched['consumption'] == matched['max_cons']]

# 第三步:对每个实体,保留年份最大的行
result = matched.groupby('Entity').apply(lambda g: g[g['Year'] == g['Year'].max()]).reset_index(drop=True)

# 保留需要的列
result = result[['Entity', 'Year', 'consumption']]

方法二:排序后取每组首行(更简洁)

先按实体分组,组内按消费值降序、年份降序排序,这样每组的第一行就是消费值最大且年份最新的记录:

# 排序:实体升序,消费降序,年份降序
sorted_df = df.sort_values(['Entity', 'consumption', 'Year'], ascending=[True, False, False])

# 按实体分组取首行
result = sorted_df.groupby('Entity').first().reset_index()

# 调整列顺序(可选,确保和需求一致)
result = result[['Entity', 'Year', 'consumption']]

两种方法都能得到你要的['Entity','Year','consumption']结构的DataFrame,当同一实体有多个年份对应相同最大消费值时,自动保留年份最大的那一行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 06:05:19