我希望python执行两个数据帧中找到的值旁边的值的更新(有点类似于MS Excel中的VLOOKUP)。所以,对于
import pandas as pd
df1 = pd.DataFrame(data = {'col1':['a', 'b', 'd'], 'col2': [1, 2, 4], 'col3': [2, 3, 4]})
df2 = pd.DataFrame(data = {'col1':['a', 'f', 'c', 'd']})
In [3]: df1
Out[3]:
col1 col2 col3
0 a 1 2
1 b 2 3
2 d 4 4
In [4]: df2
Out[4]:
col1
0 a
1 f
2 c
3 d
结果必须如下:
In [6]: df3 = *somecode*
df3
Out[6]:
col1 col2 col3
0 a 1 2
1 f
2 c
3 d 4 4
主要部分是我想要某种“for循环”来做到这一点。
因此,例如python在df2中的col1中搜索第一个值,在df1中找到它,并分别更新col2和col3,然后向前移动。
答案 0 :(得分:0)
如果存在一些矢量化解,那么首先在pandas中进行循环是最好的。
我认为必须使用左连接merge
,如果on
中只有col1
相同,则应省略参数DataFrame
:
df3 = df2.merge(df1, how='left')
print (df3)
col1 col2 col3
0 a 1.0 2.0
1 f NaN NaN
2 c NaN NaN
3 d 4.0 4.0
答案 1 :(得分:0)
试试这个,
简单的左连接将解决您的问题,
pd.merge(df2,df1,how='left',on=['col1'])
col1 col2 col3
0 a 1.0 2.0
1 f NaN NaN
2 c NaN NaN
3 d 4.0 4.0