gpt4 book ai didi

python - 将值从小数据帧映射到较大数据帧

转载 作者:行者123 更新时间:2023-12-01 09:17:20 25 4
gpt4 key购买 nike

我有两个数据框。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 中关于“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。

最佳答案

我认为需要merge左连接:

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

关于python - 将值从小数据帧映射到较大数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51121758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com