我正在寻找一种方法来做类似各种rolling_*函数的方法pandas,但我希望滚动计算的窗口由一系列值(比如,DataFrame的一列值的值)定义,而不是窗口中的行数.
举个例子,假设我有这些数据:
>>> print d
RollBasis ToRoll
0 1 1
1 1 4
2 1 -5
3 2 2
4 3 -4
5 5 -2
6 8 0
7 10 -13
8 12 -2
9 13 -5
Run Code Online (Sandbox Code Playgroud)
如果我做了类似的事情rolling_sum(d, 5),我得到一个滚动的总和,其中每个窗口包含5行.但我想要的是滚动总和,其中每个窗口包含一定范围的值RollBasis.也就是说,我希望能够做类似的事情d.roll_by(sum, 'RollBasis', 5),并得到一个结果,其中第一个窗口包含RollBasis1到5之间的所有行,然后第二个窗口包含所有RollBasis在2到6之间的行,然后是第三个window包含RollBasis3到7之间的所有行,等等.窗口的行数不会相等,但RollBasis每个窗口中选择的值范围将相同.所以输出应该是这样的:
>>> d.roll_by(sum, 'RollBasis', 5)
1 -4 # sum of elements with 1 <= Rollbasis <= 5
2 -4 # sum of …Run Code Online (Sandbox Code Playgroud) 我有一个数据集,第一列是Date,Second列是Price.交易日是交易日.
我想返回一个如下所示的表:
如果日期是从2006年开始的每个月,价格MA是过去N个月的平均价格.(N = [1,2,3,4,5,6])
例如:如果我想在2006年1月1日N = 1 Ma应该是去年12月的平均价格如果N = 2 Ma应该是去年11月和12月的平均价格
我已经阅读了一些关于从datetime和groupby提取月份的解决方案.但不知道如何将它们组合在一起.