Python 在不创建列表的情况下添加列

Python 在不创建列表的情况下添加列,python,list,numpy,pandas,Python,List,Numpy,Pandas,我有两个超过100万行的数据集,我正在用pandas进行分析,因此它们都是pd.Dataframe和著名的df1和df2。我需要根据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]) df

我有两个超过100万行的数据集,我正在用pandas进行分析,因此它们都是pd.Dataframe和著名的df1和df2。我需要根据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)

与其说您正在创建一个列表,还不如说您有一个嵌套的循环,用于处理df1和df2的所有组合。粗略地

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”是值吗?所以,如果第[0]行是10,您想要df2[10]或类似的表达式吗?通过某种方式,您可以根据df1的第一列在df2中查找值,对吗?

您应该解释数据集的外观,以及如何添加此numobs条件等。看起来你所做的只是比较df2的第一列和df1的第一列,对吗?