从小数据框中映射值到更大的数据框

2024-04-26 19:03:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据帧。 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\u 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循环的优化版本。 请评论,如果有什么我需要解释这件事。 我在用Python和熊猫。你知道吗


Tags: 数据函数newforvaluepagewordrow
1条回答
网友
1楼 · 发布于 2024-04-26 19:03:53

我想需要^{}和左连接:

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

相关问题 更多 >