【发布时间】:2017-10-22 04:40:25
【问题描述】:
对我造成的所有困惑感到抱歉。 shift 方法工作得很好。事实证明,rolling 实际上保留了所有索引,我们所要做的就是向后移动,无论索引是否正常。
似乎 pandas
rolling 方法总是保留每个时间窗口的 last 索引。例子:
import pandas as pd
import numpy as np
df = pd.DataFrame(data=np.random.randn(10, 2), columns=['a', 'b'], index=pd.date_range('20170101', periods=10))
rolling_spearmanr = df['a'].rank().rolling(window=3).corr(other=df['b'].rank())
print(rolling_spearmanr)
输出:
2017-01-01 NaN
2017-01-02 NaN
2017-01-03 0.654654
2017-01-04 -0.596040
2017-01-05 0.277350
2017-01-06 0.466321
2017-01-07 0.429838
2017-01-08 -0.921551
2017-01-09 -0.188982
2017-01-10 -0.277350
Freq: D, dtype: float64
不过,我想要的是一种让每个时间窗口保持其第一个索引的方法。可能吗?
请注意,简单地移动时间索引轴不会有帮助,因为时间窗口可能不是规则的(即使它们具有相同数量的索引)。例如,当时间索引是 business 天而不是连续的日历天时:
Index([2007-01-04, 2007-01-05, 2007-01-08, 2007-01-09, 2007-01-10, 2007-01-11], dtype='object', name='date')
现在如果我们用window=3 执行rolling,我想要的是类似
2017-01-04 ...
2017-01-09 ...
按照传统rolling method,会是
2017-01-08 ...
2017-01-11 ...
如您所见,如果您只是将输出日期向后移动2(因为每个时间窗口的长度为 3 个索引),您将不会获得所需的日期。
【问题讨论】:
-
@Bharathshetty 正如我所说,例如,如果索引是
[2007-01-04, 2007-01-05, 2007-01-08, 2007-01-09, 2007-01-10, 2007-01-11]并且时间窗口是3,那么我希望输出在删除 nan 后具有索引['2017-01-04', '2017-01-09']。 -
我认为滚动函数中根本没有考虑索引
-
@Bharathshetty 但
rolling确实保留了每个时间窗口中的最后一个索引。 -
为什么不能反转数据框并使用相同的方法?
df.iloc[::-1] -
您可以添加该代码吗?我是说你说的传统滚动方法
标签: python pandas date datetime