Python 将值从小数据帧映射到大数据帧
我有两个数据帧。 DF1: DF2:初始数据帧由前三列组成,我必须生成名为New_Value的第四列。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
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