繁体   English   中英

Pandas groupby 值并获取最大日期和最小日期的值

[英]Pandas groupby value and get value of max date and min date

我有一个 Pandas DataFrame df看起来像这样:

item year value
A    2010  20
A    2011  25
A    2012  32
B    2016  20
B    2019  40
B    2018  50

我的目标是能够为每个项目计算每个日期之间的价值差异。 然后,例如,我想为项目 A 查找:12(32 -20,因为最大年份是 2012 年,最小年份是 2010)和项目 B:20(40 - 20,因为最大年份是 2019 年,最小年份是 2016 年) .

我使用以下代码为每个项目获取 year max 和 year min :

df.groupby("item").agg({'year':[np.min, np.max]})

然后,我找到每个项目的年份最小值和年份最大值。 然而,我坚持做我想要的。

用:

def fun(x):
    return x[x.index.max()] - x[x.index.min()]


res = df.set_index("year").groupby("item").agg(fun)
print(res)

输出

      value
item       
A        12
B        20

year尝试sort_values ,然后您可以groupby并选择firstminlastmax

g = df.sort_values('year').groupby('item')
out = g['value'].last() - g['value'].first()

输出:

item
A    12
B    20
Name: value, dtype: int64

在 agg 中使用 loc 访问器来计算值差异,此外,您还可以连接项目中的第一年和去年,以明确指示范围。

df.sort_values(by=['item','year']).groupby('item').agg( year=('year', lambda x: str(x.iloc[0]) +'-'+str(x.iloc[-1])),value=('value', lambda x: x.iloc[-1]-x.iloc[0]))



      year    value
item                  
A     2010-2012     12
B     2016-2019     20

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM