我有一个矩阵(准确地说是2d numpy ndarray):
A = np.array([[4, 0, 0],
[1, 2, 3],
[0, 0, 5]])
Run Code Online (Sandbox Code Playgroud)
我想A根据另一个数组中的滚动值独立滚动每一行:
r = np.array([2, 0, -1])
Run Code Online (Sandbox Code Playgroud)
也就是说,我想这样做:
print np.array([np.roll(row, x) for row,x in zip(A, r)])
[[0 0 4]
[1 2 3]
[0 5 0]]
Run Code Online (Sandbox Code Playgroud)
有没有办法有效地做到这一点?也许使用花哨的索引技巧?
我是 python 新手,上次编码是在 80 年代中期,所以我感谢您的耐心帮助。
看来 .rolling(window) 要求窗口是固定整数。我需要一个滚动窗口,其中窗口或回溯期是动态的并由另一列给出。
在下表中,我查找 Lookbacksum,它是 Lookback 列指定的数据的滚动总和。
d={'Data':[1,1,1,2,3,2,3,2,1,2],
'Lookback':[0,1,2,2,1,3,3,2,3,1],
'LookbackSum':[1,2,3,4,5,8,10,7,8,3]}
df=pd.DataFrame(data=d)
Run Code Online (Sandbox Code Playgroud)
例如:
Data Lookback LookbackSum
0 1 0 1
1 1 1 2
2 1 2 3
3 2 2 4
4 3 1 5
5 2 3 8
6 3 3 10
7 2 2 7
8 1 3 8
9 2 1 3
Run Code Online (Sandbox Code Playgroud) 我有一个先前已移位的pandas数据透视表,现在看起来像这样:
pivot
A B C D E
0 5.3 5.1 3.5 4.2 4.5
1 5.3 4.1 3.5 4.2 NaN
2 4.3 4.1 3.5 NaN NaN
3 4.3 4.1 NaN NaN NaN
4 4.3 NaN NaN NaN NaN
Run Code Online (Sandbox Code Playgroud)
我试图通过反向对角线迭代每一列来计算具有可变窗口(在这种情况下为3和4个周期)的滚动平均值,并尝试将该值存储在新的数据帧中,如下所示:
expected_df with a 3 periods window
A B C D E
0 4.3 4.1 3.5 4.2 4.5
expected_df with a 4 periods window
A B C D E
0 4.5 4.3 3.5 4.2 4.5
Run Code Online (Sandbox Code Playgroud)
到目前为止,我尝试对原始数据透视表进行子集化,并创建一个不同的数据框,只包含每列的指定窗口值,然后计算平均值,如下所示:
subset
A B C D E
0 …Run Code Online (Sandbox Code Playgroud)