将值从小数据框映射到大数据框

我有两个数据框。DF1:


Page      LineNum      Value

1          1            0.5

1          2            0.6

1          3            0.7

2          1            0.9

2          2            0.4

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中相对于“页面”和“ 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。


qq_笑_17
浏览 154回答 1
1回答

哔哔one

我认为需要merge左连接:df = (df2.merge(df1.rename(columns={'Value':'New_Value'}),                on=['Page','LineNum'], how='left'))print (df)   Page  LineNum Word  New_Value0     1        1   g1        0.51     1        1   g2        0.52     1        1   g3        0.53     1        1   g4        0.54     1        2   g5        0.65     1        2   g6        0.66     1        3   g7        0.77     1        3   g8        0.7
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python