我试图添加一个代码,其中,如果当前日期和id列的最小日期之间的差异超过3个月,滚动平均值应该是21天的窗口,否则应该是7天的窗口。
示例数据:
import pandas as pd
import numpy as np
np.random.seed(0)
dt = pd.DataFrame({'id' : [1,1,2,2,1],
'date' : ['2023-09-01', '2023-09-10', '2023-01-01', '2023-01-13', '2023-09-11'],
'rev' : np.random.randint(100, 150, 5)})
dt
id date rev
0 1 2023-09-01 144
1 1 2023-09-10 147
2 2 2023-01-01 100
3 2 2023-01-13 103
4 1 2023-09-11 103
字符串
我想得到的滚动平均值是:
dt.groupby('id').transform(lambda x : x['rev'].rolling(window = '21D', min_periods = 1).mean() if pd.to_datetime('today') - x['date'].min() >= 90 else x['rev'].rolling(window = '7D', min_periods = 1).mean())
型
但是我得到了KeyError: 'date'
错误。
有人能帮我弄一下滚动装置吗?
2条答案
按热度按时间wtzytmuj1#
创建
DatetimeIndex
并按Timedelta.days
比较天数:字符串
transform
:型
57hvy0tb2#
您可以在
groupby.apply
中使用on
关键字:字符串
输出量:
型