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

Pandas按item分组后如何计算分组内最大最小年份对应value的差值

实现方法

你可以选择以下任意一种方案完成计算:

方案1:自定义分组聚合(最直观,一步完成)

直接对每个分组提取最大/最小年份对应的value做差:

import pandas as pd
import numpy as np

def year_value_diff(group):
    # 取分组内年份最小、最大值对应的行索引
    min_year_idx = group['year'].idxmin()
    max_year_idx = group['year'].idxmax()
    # 返回差值
    return group.loc[max_year_idx, 'value'] - group.loc[min_year_idx, 'value']

# 分组计算得到结果
res = df.groupby('item').apply(year_value_diff).reset_index(name='diff_value')

输出结果:

item  diff_value
0    A          12
1    B          20

方案2:基于你已有代码继续开发

如果你已经计算得到了各分组的最大、最小年份,可以按如下步骤关联原表取值计算:

# 你的原有代码,调整为命名列方便后续关联
year_stat = df.groupby("item").agg(
    min_year=('year', np.min),
    max_year=('year', np.max)
).reset_index()

# 关联最小年份对应的value
year_stat = year_stat.merge(
    df, left_on=['item', 'min_year'], right_on=['item', 'year'], how='left'
).rename(columns={'value': 'min_value'}).drop('year', axis=1)

# 关联最大年份对应的value
year_stat = year_stat.merge(
    df, left_on=['item', 'max_year'], right_on=['item', 'year'], how='left'
).rename(columns={'value': 'max_value'}).drop('year', axis=1)

# 计算最终差值
year_stat['diff_value'] = year_stat['max_value'] - year_stat['min_value']

方案3:排序后取首尾差值(代码最简)

先按item和year排序,分组后直接取最后一行value减第一行value即可:

df_sorted = df.sort_values(['item', 'year'])
res = df_sorted.groupby('item')['value'].agg(
    lambda x: x.iloc[-1] - x.iloc[0]
).reset_index(name='diff_value')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:15:03