2015-10-15 109 views
0

我有兩個超過100萬行的數據集,我用熊貓分析它(因此它們都是pd.Dataframe並注意到df1df2)。我需要根據df2的值添加一列到df1。我使用了python列表,但速度非常慢。任何建議要更快?添加一個熊貓列而不創建一個列表

import pandas as pd, numpy as np 

numObs = [] 
for line in np.array(df1): 
    numObs.append([num for i,num,exp in df2 if i==line[0]][0]) 
df1['NumObs'] = pd.Series(np.array(numObs),index = df1.index) 
+0

你應該解釋你的數據集是怎麼樣的,以及你如何添加這個numobs(條件等),而不是僅僅代碼 –

+0

看起來你所做的只是比較第一個co第一列「df1」的「df2」列是否正確? – EdChum

回答

0

它不是這麼多,您要創建一個列表,但你有一個嵌套循環,帶你過的df1df2所有組合。大約

for line in np.array(df1): 
    numObs.append([num for i,num,exp in df2 if i==line[0]][0]) 

擴展到

for line in np.array(df1): 
    for i, num, exp in df2: 
     finds = [] 
     if i==line[0]: 
      finds.append(num) 
     numObs.append(finds[0]) 

通常列表理解比外在的循環速度較快,但在這裏,你扔大部分內環發現什麼了。只需從當找到匹配的內環突破,可以節省大量的時間(這取決於它有多遠DF2迭代找到了比賽。

for line in np.array(df1): 
    for i, num, exp in df2: 
     finds = [] 
     if i==line[0]: 
      numObs.append(num) 
      break 

我不是那熟悉的大熊貓。是'我'的行數,'num'的值?所以,如果line[0]是10,你想要df2[10](或一些這樣的表達式)?一種方法或其他你在df2查找基於第一個'列' df1,對嗎?

相關問題