Python 通过匹配另一个数据帧中的值来优化数据帧列的填充

Python 通过匹配另一个数据帧中的值来优化数据帧列的填充,python,optimization,pandas,Python,Optimization,Pandas,基本上,我有两个数据帧,并希望通过将第二个数据帧的三行元素和第一个数据帧匹配来重新填充第二个数据帧的一列。举个例子,我在两个数据帧中都有“Period”和“Hub”列。对于第二个数据帧中的每一行,我希望获取Index(日期)和“Product”/“Hub”(字符串)的值,并在第一个数据帧中找到具有这些相同值的行(在相应的列中),然后从该行返回“Period”的值。然后,我可以用这个值填充第二个数据帧中的行 我有一个可行的解决方案,但它真的很慢。也许这只是因为数据帧的大小(大约10万行),但处理它

基本上,我有两个数据帧,并希望通过将第二个数据帧的三行元素和第一个数据帧匹配来重新填充第二个数据帧的一列。举个例子,我在两个数据帧中都有“Period”和“Hub”列。对于第二个数据帧中的每一行,我希望获取Index(日期)和“Product”/“Hub”(字符串)的值,并在第一个数据帧中找到具有这些相同值的行(在相应的列中),然后从该行返回“Period”的值。然后,我可以用这个值填充第二个数据帧中的行

我有一个可行的解决方案,但它真的很慢。也许这只是因为数据帧的大小(大约10万行),但处理它需要一个多小时

无论如何,这是我的工作解决方案-任何关于如何加快它的提示将非常感谢

def selectData(hub, product):
    qry = "Hub=='"+hub+"' and Product=='"+product+"'"
    return data_1.query(qry)

data_2["Period"] = data_2.apply(lambda row: selectData(row["Hub"], row["Product"]).ix[row.index, "Period"], axis=1)
编辑:我应该注意,第一个数据帧保证对我的查询具有唯一的结果,但包含的数据集比填充
data\u 2所需的数据集更大


EDIT2:我刚刚意识到这实际上不是一个有效的解决方案…

如果我正确理解您的问题,您希望
索引(日期)、产品、中心上的这两个数据框合并
,并从
数据1
中获取
期间

#data_1 is the larger dictonary

n=100000
data_1 = pd.DataFrame(np.random.randint(1,100,(n,3)), 
                      index=pd.date_range('2012-01-01',periods=n, freq='1Min').date,
                      columns=['Product', 'Hub', 'Period']).drop_duplicates()
data_1.index.name='Date'

#data_2 is a random subset, w/o column Period
data_2 = data_1.ix[np.random.randint(0,len(data_1),1000), ['Product','Hub']]
我没有数据,但在随机
int
s上进行了测试。在
data\u 1

#data_1 is the larger dictonary

n=100000
data_1 = pd.DataFrame(np.random.randint(1,100,(n,3)), 
                      index=pd.date_range('2012-01-01',periods=n, freq='1Min').date,
                      columns=['Product', 'Hub', 'Period']).drop_duplicates()
data_1.index.name='Date'

#data_2 is a random subset, w/o column Period
data_2 = data_1.ix[np.random.randint(0,len(data_1),1000), ['Product','Hub']]
要在索引+某些列上联接,可以执行以下操作:

data_3 = data_2.reset_index().merge(data_1.reset_index(), on=['Date','Product','Hub'], how='left')

请显示输入数据和您期望的输出。复制一份可糊化的溶液是最好的。