添加pandas列而不创建列表



我有2个超过100万行的数据集,我正在用pandas分析它(因此它们都是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)

这并不是说您正在创建一个列表,而是您有一个嵌套循环,将您带过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

我不太熟悉熊猫。是'i'行计数,和'num'的值?所以,如果line[0]是10,你想要df2[10](或其他类似的表达式)?无论如何,您正在根据df1的第一个"列"查找df2中的值,对吗?

最新更新