我可以問建議更有效地迭代(和更快)嗎? 這裏的問題,我正在尋找一種方式來在大熊貓數據幀確定窗口大小中傳播的零下來:尋找一個有效的方式來迭代
import numpy as np
import pandas as pd
A = np.matrix([[ 0., 1., 1., 1., 1.],
[ 1., 0., 1., 1., 1.],
[ 1., 1., 0., 1., 1.],
[ 1., 1., 1., 0., 1.],
[ 1., 1., 1., 1., 0.],
[ 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 0.],
[ 1., 1., 0., 1., 1.],
[ 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1.],
[ 1., 1., 1., 1., 1.],
[ 1., 1., 1., 0., 1.],
[ 1., 1., 1., 1., 1.],
[ 1., 1., 0., 1., 1.],
[ 1., 1., 1., 1., 0.],
[ 1., 0., 1., 1., 1.],
[ 1., 1., 1., 1., 1.]])
df = pd.DataFrame(A)
現在我們要通過的3行,每行 從數值窗口的增量填補頂端。 3行的每個窗口開始於window_start,定義爲:
window_size = 3
window_start = [i for i in range(0, df.shape[0])
if i % window_size == 0]
print(df)
gf = df.copy()
print('\n')
現在使數據幀,其中零從該窗口內的 前述上面的行傳播:
for i in window_start:
for j in range(1, window_size):
try: gf.iloc[i + j] = gf.iloc[i + j - 1] * gf.iloc[i + j]
except: pass
print(gf)
該最後位是相當對於非常大的數據集來說效率低下且耗時,是否有更好的方法來做到這一點?
注意,這將如果值溢出失敗,例如'[1e200,1e200,0]',因爲cumprod會產生'[1e200,inf,nan]'。 ;-) #unlikelyfailuremodeoftheday – DSM
不錯的主題標籤:-) – piRSquared