gpt4 book ai didi

python - 如何使用 pandas 按组减去基于数据的列的行?

转载 作者:行者123 更新时间:2023-12-01 23:38:04 24 4
gpt4 key购买 nike

我正在尝试根据第一个日期和最后一个日期按组计算列的行之间的差异。例如:

df = pd.DataFrame({'ID':["a","a","a","b","b","b"],
'start_yr':[2010,2013,2020,2009,2005,2019],
'amt':[10,40,30,50,60,100]})

应该返回

a 20   (30-10)
b 40 (100 - 60)

我已经尝试过类似的东西,但我肯定遗漏了一些东西。

#df['diff'] = df.groupby('ID')['start_yr','amt'].transform(lambda x: (x.max()-x.min()))
df['diff'] = dThe f.groupby('ID')['start_yr'].transform(lambda x: (x.max()-x.min()))

最佳答案

首先按 DataFrame.sort_values 对两列进行排序然后用 GroupBy.agg 中的第一个值减去最后一个:

df1 = (df.sort_values(['ID','start_yr'])
.groupby('ID')['amt']
.agg(lambda x: (x.iat[-1]-x.iat[0]))
.reset_index())

或用聚合减去值 GroupBy.firstGroupBy.last :

df = df.sort_values(['ID','start_yr'])
g = df.groupby('ID')['amt']

df1 = g.last().sub(g.first()).reset_index()

或者对于第一个和最后一个值,可以使用 DataFrame.drop_duplicates :

df = df.sort_values(['ID','start_yr'])

df1 = (df.drop_duplicates('ID', keep='last').set_index('ID')['amt']
.sub(df.drop_duplicates('ID').set_index('ID')['amt'])
.reset_index())

print (df1)
ID amt
0 a 20
1 b 40

编辑:这是没有先按 DataFrameGroupBy.idxmax 排序的想法 DataFrameGroupBy.idxmin对于按索引的值(此处为 amt)按 start_yr 的最小值和最大值:

g = df.set_index('amt').groupby('ID')['start_yr']

s = g.idxmax().sub(g.idxmin()).reset_index()
print (s)
ID start_yr
0 a 20
1 b 40

关于python - 如何使用 pandas 按组减去基于数据的列的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65301072/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com