我有两个数据框。DF1:Page LineNum Value1 1 0.51 2 0.61 3 0.72 1 0.92 2 0.4DF2:初始数据帧是前三列,我必须生成名为New_Value的第四列。Page LineNum Word New_Value1 1 g1 0.51 1 g2 0.51 1 g3 0.51 1 g4 0.51 2 g5 0.61 2 g6 0.61 3 g7 0.71 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。
1 回答

哔哔one
TA贡献1854条经验 获得超8个赞
我认为需要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
添加回答
举报
0/150
提交
取消