gpt4 book ai didi

python - Pandas groupby() transform() max() 带过滤器

转载 作者:行者123 更新时间:2023-11-28 17:17:16 28 4
gpt4 key购买 nike

我有一个这样的数据框:

id     date       value
1 12/01/2016 5
1 25/02/2016 7
1 10/03/2017 13
2 02/04/2016 0
2 06/07/2016 1
2 12/03/2017 6

我想为 'id' 的每个唯一值创建一个名为 'max_ever' 的列

我可以这样做:df['max_ever']=df.groupby(['id'])['value'].transform(max)

这会给我:

id     date       value  max_ever
1 12/01/2016 5 13
1 25/02/2016 7 13
1 10/03/2017 13 13
2 02/04/2016 0 6
2 06/07/2016 1 6
2 12/03/2017 6 6

但我想从 today()'id' 的每个唯一值添加另一个名为 'max_12_months' 的列。 p>

我可以创建一个包含过滤日期的新数据框并重复上述操作,但我想尝试在此数据框中进行过滤和转换。

最终的数据框看起来像这样:

id     date       value  max_ever  max_12_months
1 12/01/2016 13 13 7
1 25/05/2016 7 13 7
1 10/03/2017 5 13 7
2 02/04/2016 6 6 2
2 06/07/2016 1 6 2
2 12/03/2017 2 6 2

感谢任何帮助!

最佳答案

应用的自定义agg函数...然后加入

today = pd.to_datetime(pd.datetime.today()).floor('D')
year_ago = today - pd.offsets.Day(366)

def max12(df):
return df.value.loc[df.date.between(year_ago, today)].max()

def aggf(df):
return pd.Series(
[df.value.max(), max12(df)],
['max_ever', 'max_12_months']
)

df.join(df.groupby('id').apply(aggf), on='id')

id date value max_ever max_12_months
0 1 2016-01-12 13 13 7
1 1 2016-05-25 7 13 7
2 1 2017-03-10 5 13 7
3 2 2016-04-02 6 6 2
4 2 2016-07-06 1 6 2
5 2 2017-03-12 2 6 2

关于python - Pandas groupby() transform() max() 带过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43524549/

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