for循环用于在数据帧中搜索值并更新其旁边的值

时间:2018-06-01 06:39:13

标签: python pandas for-loop dataframe

我希望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,然后向前移动。

2 个答案:

答案 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