带有 if 语句的 for 循环运行缓慢
for loop with if statement runs slow
我有一个长数据框,大约有 150k 行和两列(A 和 B)。我正在为“i”行在“B”列中编写代码,如果 A 列中接下来的 6 行 == 1,则 B=1.
到目前为止,我设法编写了一个工作代码(见下文)。但是到运行很慢,大概5min。您对如何提高代码效率有什么建议吗?谢谢!
df[j]['B'] = 0
for i in np.arange(0,len(df[j]['A'])-1, dtype=np.float64):
try:
if (df[j]['A'][i+1] == 1) & (df[j]['A'][i+2]==1) & (df[j]['A'][i+3]==1) & (df[j]['A'][i+4]==1) & (df[j]['A'][i+5]==1) & (df[j]['A'][i+6]==1) == True:
df[j]['B'][i] = 1
except:
pass
我已经尝试删除 try/except 块但仍然没有改善,实际上它慢了 1 秒。
for i in np.arange(0,len(WT_df[j]['ID10'])-7, dtype=np.float64):
if (WT_df[j]['ID10'][i+1] == 1) & (WT_df[j]['ID10'][i+2]==1) & (WT_df[j]['ID10'][i+3]==1) & (WT_df[j]['ID10'][i+4]==1) & (WT_df[j]['ID10'][i+5]==1) & (WT_df[j]['ID10'][i+6]==1) == True:
WT_df[j]['ID_on'][i] = 1
此致,
路易斯
Pandas 直接索引很慢(至少在循环中)。您可以 向量化循环 以加快速度。这是一个未经测试的例子:
column = WT_df[j]['ID10'].values
size = column.size-7
result = np.ones(size, dtype=bool)
for k in range(1, 7):
result &= column[k:size+k] == 1
WT_df[j].loc[np.where(result)[0], 'ID_on'] = 1
我有一个长数据框,大约有 150k 行和两列(A 和 B)。我正在为“i”行在“B”列中编写代码,如果 A 列中接下来的 6 行 == 1,则 B=1.
到目前为止,我设法编写了一个工作代码(见下文)。但是到运行很慢,大概5min。您对如何提高代码效率有什么建议吗?谢谢!
df[j]['B'] = 0
for i in np.arange(0,len(df[j]['A'])-1, dtype=np.float64):
try:
if (df[j]['A'][i+1] == 1) & (df[j]['A'][i+2]==1) & (df[j]['A'][i+3]==1) & (df[j]['A'][i+4]==1) & (df[j]['A'][i+5]==1) & (df[j]['A'][i+6]==1) == True:
df[j]['B'][i] = 1
except:
pass
我已经尝试删除 try/except 块但仍然没有改善,实际上它慢了 1 秒。
for i in np.arange(0,len(WT_df[j]['ID10'])-7, dtype=np.float64):
if (WT_df[j]['ID10'][i+1] == 1) & (WT_df[j]['ID10'][i+2]==1) & (WT_df[j]['ID10'][i+3]==1) & (WT_df[j]['ID10'][i+4]==1) & (WT_df[j]['ID10'][i+5]==1) & (WT_df[j]['ID10'][i+6]==1) == True:
WT_df[j]['ID_on'][i] = 1
此致, 路易斯
Pandas 直接索引很慢(至少在循环中)。您可以 向量化循环 以加快速度。这是一个未经测试的例子:
column = WT_df[j]['ID10'].values
size = column.size-7
result = np.ones(size, dtype=bool)
for k in range(1, 7):
result &= column[k:size+k] == 1
WT_df[j].loc[np.where(result)[0], 'ID_on'] = 1