我有一個df看起來像這樣的Pandas DataFrame :
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]})
然后,我找到每個專案的年份最小值和年份最大值。然而,我堅持做我想要的。
uj5u.com熱心網友回復:
Try sort_valuesby year,然后您可以groupby選擇firstformin和lastfor max:
g = df.sort_values('year').groupby('item')
out = g['value'].last() - g['value'].first()
輸出:
item
A 12
B 20
Name: value, dtype: int64
uj5u.com熱心網友回復:
用:
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
uj5u.com熱心網友回復:
在 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/343400.html
