【发布时间】:2020-11-20 16:05:34
【问题描述】:
数据框:
date A B C D
index
0 2015-01 .. .. .. ..
1 2015-01 .. .. .. ..
2 2015-02 .. .. .. ..
3 2015-02 .. .. .. ..
4 2015-03 .. .. .. ..
5 2015-03 .. .. .. ..
6 2015-04 .. .. .. ..
7 2015-04 .. .. .. ..
8 2015-05 .. .. .. ..
9 2015-05 .. .. .. ..
...
1000 ... .. .. .. ..
我想使用从固定窗口开始的日期 (pd.to_datetime) 进行迭代(例如,前三个月 [2015-01, 2015-01, 2015-02, 2015-02, 2015-03, 2015-03 ]) 并返回一个数据框:
date A B C D
index
0 2015-01 .. .. .. ..
1 2015-01 .. .. .. ..
2 2015-02 .. .. .. ..
3 2015-02 .. .. .. ..
4 2015-03 .. .. .. ..
5 2015-03 .. .. .. ..
然后添加下个月 [2015-04, 2015-04] 并删除最旧的 [2015-01, 2015-01],返回下一个数据帧:
date A B C D
index
2 2015-02 .. .. .. ..
3 2015-02 .. .. .. ..
4 2015-03 .. .. .. ..
5 2015-03 .. .. .. ..
6 2015-04 .. .. .. ..
7 2015-04 .. .. .. ..
继续这个直到数据结束。
我已经弄清楚了以下代码:
periods = len(dataframe)
fxw = 3
for i in range(0, periods):
start = i
if i + fxw > periods:
break
else: end_df = i + fxw
# output:
# df1
date A B C D
index
0 2015-01 .. .. .. ..
1 2015-01 .. .. .. ..
2 2015-02 .. .. .. ..
# df2
date A B C D
index
3 2015-02 .. .. .. ..
4 2015-03 .. .. .. ..
5 2015-03 .. .. .. ..
...
# dfend
我可以设置一个固定窗口 (fxw = 3) 来迭代数据帧的长度,每次 3 行,直到数据结束。 (例如,如果数据帧有 12 行,它将返回 4 个数据帧,每个数据帧 3 行)。但是,通过这种方式,我既不是按日期选择窗口,也不是删除最后一个数据点并添加下一个数据点。我还没有弄清楚该怎么做。如果有人有可能的解决方案/建议,将不胜感激! 谢谢!
【问题讨论】:
-
pd.Period()和pd.PeriodIndex()对于制作这个 3 个月的滑动窗口很有用;见pandas.pydata.org/pandas-docs/stable/reference/api/… -
这听起来很有趣,谢谢我去看看!
标签: python pandas loops date sliding