【发布时间】:2018-05-08 23:37:34
【问题描述】:
这是一个示例代码。
df = pd.DataFrame(np.random.randn(10, 2), columns=list('AB'))
df['C'] = df.B.rolling(window=3)
输出:
A B C
0 -0.108897 1.877987 Rolling [window=3,center=False,axis=0]
1 -1.276055 -0.424382 Rolling [window=3,center=False,axis=0]
2 1.578561 -1.094649 Rolling [window=3,center=False,axis=0]
3 -0.443294 1.683261 Rolling [window=3,center=False,axis=0]
4 0.674124 0.281077 Rolling [window=3,center=False,axis=0]
5 0.587773 0.697557 Rolling [window=3,center=False,axis=0]
6 -0.258038 -1.230902 Rolling [window=3,center=False,axis=0]
7 -0.443269 0.647107 Rolling [window=3,center=False,axis=0]
8 0.347187 0.753585 Rolling [window=3,center=False,axis=0]
9 -0.369179 0.975155 Rolling [window=3,center=False,axis=0]
我希望我的“C”列是一个类似 [0.1231, -1.132, 0.8766] 的数组。 我尝试使用滚动应用,但没有成功。
预期输出:
A B C
0 -0.108897 1.877987 []
1 -1.276055 -0.424382 []
2 1.578561 -1.094649 [-1.094649, -0.424382, 1.877987]
3 -0.443294 1.683261 [1.683261, -1.094649, -0.424382]
4 0.674124 0.281077 [0.281077, 1.683261, -1.094649]
5 0.587773 0.697557 [0.697557, 0.281077, 1.683261]
6 -0.258038 -1.230902 [-1.230902, 0.697557, 0.281077]
7 -0.443269 0.647107 [0.647107, -1.230902, 0.697557]
8 0.347187 0.753585 [0.753585, 0.647107, -1.230902]
9 -0.369179 0.975155 [0.975155, 0.753585, 0.647107]
【问题讨论】:
-
不,这是不可能的。每个滚动窗口计算必须返回一个聚合结果。如果您的函数不能保证这一点,那么您可能需要考虑其他选项。
-
谢谢。 loc/iloc/ix/others 可以吗?我想回顾一个窗口并获取数组。
-
我想看看你的实际功能和该数据的预期输出。你到底想做什么?显然,除非我知道您的实际功能是做什么的,否则我无法帮助您。
-
当然。我试图通过数组乘以 X 因子。例如:[ 1, 2, 3, 4] 将在因子为 1.5 时返回 [ 1.5, 3, 4.5, 6]。我试图提供一个清晰的数据框
-
好的。为什么需要滚动窗口?每个窗口计算如何相互关联?它们如何适应最终的数据框?比如说,对于
[1, 2, 3, 4, 5, 6, 7, 8]和window_size=3的列,你想要的输出是什么? (这是非常重要的信息,我还希望您编辑您的问题...谢谢)
标签: python pandas numpy dataframe