【发布时间】:2016-08-26 10:26:35
【问题描述】:
我有一个像这样的Pandas 数据框:
test = pd.DataFrame({ 'Date' : ['2016-04-01','2016-04-01','2016-04-02',
'2016-04-02','2016-04-03','2016-04-04',
'2016-04-05','2016-04-06','2016-04-06'],
'User' : ['Mike','John','Mike','John','Mike','Mike',
'Mike','Mike','John'],
'Value' : [1,2,1,3,4.5,1,2,3,6]
})
如下所示,数据集不一定每天都有观测值:
Date User Value
0 2016-04-01 Mike 1.0
1 2016-04-01 John 2.0
2 2016-04-02 Mike 1.0
3 2016-04-02 John 3.0
4 2016-04-03 Mike 4.5
5 2016-04-04 Mike 1.0
6 2016-04-05 Mike 2.0
7 2016-04-06 Mike 3.0
8 2016-04-06 John 6.0
如果至少有一天可用,我想添加一个新列,该列显示每个用户过去 n 天的平均值(在本例中 n = 2),否则它将具有 nan 值。例如,在2016-04-06 上,John 得到nan,因为他没有2016-04-05 和2016-04-04 的数据。所以结果会是这样的:
Date User Value Value_Average_Past_2_days
0 2016-04-01 Mike 1.0 NaN
1 2016-04-01 John 2.0 NaN
2 2016-04-02 Mike 1.0 1.00
3 2016-04-02 John 3.0 2.00
4 2016-04-03 Mike 4.5 1.00
5 2016-04-04 Mike 1.0 2.75
6 2016-04-05 Mike 2.0 2.75
7 2016-04-06 Mike 3.0 1.50
8 2016-04-06 John 6.0 NaN
看了论坛里的几篇帖子,好像应该是group_by和自定义rolling_mean的组合,但是我不太明白怎么做。
【问题讨论】:
-
您使用的是哪个版本的 Pandas?
pd.__version__
标签: python pandas time-series aggregation