我有一个数据帧df
,其中包含零星的每日工作日行(即,并非每个工作日都有一行)
对于df
中的每一行,我想创建一个历史重采样平均值dfm
,每次可追溯到一个月前。例如,如果我有一个2018-02-22
的行,那么我希望滚动表示以下日期范围内的行:
2018-01-23 : 2018-02-22
2017-12-23 : 2018-01-22
2017-11-23 : 2017-12-22
但我看不出一种方法可以使用conventional offsets将此绑定到该月的特定日期。例如,如果我这样做:
dfm = df.resample('30D').mean()
然后我们看到两个问题:
它引用数据帧的开头。事实上,我找不到一种方法来强制.resample()
将自己绑定到数据帧的末尾,即使我让它对df_reversed = df.loc[:'2018-02-22'].iloc[::-1]
进行操作。有没有一种方法可以将重采样“钉”到数据帧中最早的日期之外的某个地方?(理想情况下,当我从每一行的日期对相关的历史重采样运行一些lambda时,最好与每一行特定的行挂钩?)
它会随着时间推移而漂移,因为不是每个月都有30天长。所以当我回到过去的时候,我会发现间隔12个月之前结束2017-02-27
,而不是我想要的2017-02-22
。
知道我想按不重叠的“月份”重新采样,第二个问题可以很好地定义为第29-31个月:例如,如果我要求对“2018-03-31”进行重新采样,则日期范围将在前一个月的月末结束:
2018-03-01 : 2018-03-31
2018-02-01 : 2018-02-28
2018-01-01 : 2018-02-31
不过,我也不知道:在熊猫身上,有没有一种好的或简单的方法可以做到这一点?在
假设如下:
^{pr2}$现在:
对于df
中的每一行:计算df['PreviousMonthMean']
=范围df.x
内所有df.x
的滚动平均值。在本例中,生成的数据帧将是:
Index x MonthPrior PreviousMonthMean
2017-01-03 3 2016-12-03 NaN
2017-01-11 11 2016-12-11 3
2017-01-19 19 2016-12-19 7
2017-01-27 27 2016-12-27 11
2017-02-04 4 2017-01-04 19
2017-02-12 12 2017-01-12 16.66666667
2017-02-20 20 2017-01-20 14.33333333
2017-02-28 28 2017-01-28 12
2017-03-08 8 2017-02-08 20
2017-03-16 16 2017-02-16 18.66666667
2017-03-24 24 2017-02-24 17.33333333
2017-04-01 1 2017-03-01 16
2017-04-09 9 2017-03-09 13.66666667
2017-04-17 17 2017-03-17 11.33333333
2017-04-25 25 2017-03-25 9
2017-05-03 3 2017-04-03 17
2017-05-11 11 2017-04-11 15
2017-05-19 19 2017-04-19 13
2017-05-27 27 2017-04-27 11
2017-06-04 4 2017-05-04 19
如果我们能做到这一点,那么我需要找到一种有效的迭代方法,以便对于df
中的每一行,我可以从给定的DateTimeIndex一次聚合连续但不重叠的值。。。。在
目前没有回答
相关问题 更多 >
编程相关推荐