Python 将值从小数据帧映射到大数据帧

Python 将值从小数据帧映射到大数据帧,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有两个数据帧。 DF1: DF2:初始数据帧由前三列组成,我必须生成名为New_Value的第四列。 Page LineNum Word New_Value 1 1 g1 0.5 1 1 g2 0.5 1 1 g3 0.5 1 1 g4 0.5 1 2

我有两个数据帧。 DF1:

DF2:初始数据帧由前三列组成,我必须生成名为New_Value的第四列。

Page      LineNum      Word    New_Value
1          1            g1      0.5
1          1            g2      0.5
1          1            g3      0.5
1          1            g4      0.5
1          2            g5      0.6
1          2            g6      0.6
1          3            g7      0.7
1          3            g8      0.7
...
我必须生成DF2的第四列,它实际上是从DF1的唯一“Page”和“LineNum”值映射而来的。在DF2中,仅根据DF1中关于“Page”和“LineNum”的唯一值重复这些值

我目前正在通过for循环执行此操作:

    for index, row in DF1.iterrows():
        DF2.ix[((DF2['Page'] == row['Page']) & (DF2['LineNum'] == row['LineNum'])),['New_Value']] = row['Value']
这工作非常好,但两个数据帧都非常大。所以我需要一些优化的函数,可能是使用groupby和lambda,但无法设计出精确的函数

请建议一个没有For循环的优化版本。 请评论,如果有什么其他我需要解释这一点。 我正在使用Python3和pandas。

我认为需要左连接:

df = (df2.merge(df1.rename(columns={'Value':'New_Value'}),
                on=['Page','LineNum'], how='left'))
print (df)

   Page  LineNum Word  New_Value
0     1        1   g1        0.5
1     1        1   g2        0.5
2     1        1   g3        0.5
3     1        1   g4        0.5
4     1        2   g5        0.6
5     1        2   g6        0.6
6     1        3   g7        0.7
7     1        3   g8        0.7
df = (df2.merge(df1.rename(columns={'Value':'New_Value'}),
                on=['Page','LineNum'], how='left'))
print (df)

   Page  LineNum Word  New_Value
0     1        1   g1        0.5
1     1        1   g2        0.5
2     1        1   g3        0.5
3     1        1   g4        0.5
4     1        2   g5        0.6
5     1        2   g6        0.6
6     1        3   g7        0.7
7     1        3   g8        0.7