【发布时间】:2017-10-02 19:33:03
【问题描述】:
我可以请求建议以更有效(更快)地进行迭代吗? 这是问题所在,我正在寻找一种方法在确定的窗口大小内在 pandas DataFrame 中向下传播零:
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')
现在制作零传播的DataFrame 该窗口内的前几行:
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)
最后一点对于非常大的数据集来说效率很低且耗时,有没有更好的方法来做到这一点?
【问题讨论】:
标签: python-3.x performance pandas numpy pandas-groupby