我有一個長資料框,大約有 150k 行和兩列(A 和 B)。我正在為行“i”撰寫“B”列中的代碼,如果 A 列中的下 6 行 == 1,則 B=1。
到目前為止,我設法撰寫了一個作業代碼(見下文)。但是,運行速度很慢,大約 5 分鐘。您對如何使代碼更高效有什么建議嗎?謝謝!
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
最好的問候,路易斯
uj5u.com熱心網友回復:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/447087.html
標籤:python-3.x for循环 优化
