Python 熊猫:使用两个数据帧进行垂直查找

Python 熊猫:使用两个数据帧进行垂直查找,python,pandas,dataframe,mapping,vlookup,Python,Pandas,Dataframe,Mapping,Vlookup,我有一个坐标值的数据框,如下所示: lat lon E N 0 48.010258 -6.156909 90089.518711 -201738.245555 1 48.021648 -6.105887 93961.324059 -200676.766517 2 48.033028 -6.054801 97836.321204 -199614.270439 ... ...

我有一个坐标值的数据框,如下所示:

    lat         lon         E               N
0   48.010258   -6.156909   90089.518711    -201738.245555
1   48.021648   -6.105887   93961.324059    -200676.766517
2   48.033028   -6.054801   97836.321204    -199614.270439
... ...         ...         ...             ...
以及另一个数据帧df2,它将气候值与每个(纬度、经度)对相关联:

我想创建一个新列,
df1['corr_pos']
,其中每一行都有
df2
的索引,对应于
df1
中的(lat,lon)对。这就像在Excel中使用VLOOKUP一样,但是使用两个值来标识正确的索引,而不是只使用一个。这两个值是坐标对

产出将是:

    lat         lon         E               N               corr_pos
0   48.010258   -6.156909   90089.518711    -201738.245555  0
1   48.021648   -6.105887   93961.324059    -200676.766517  3
2   48.033028   -6.054801   97836.321204    -199614.270439  8
... ...         ...         ...             ...             ...
数据帧
df1
df2
的顺序不同我如何在熊猫中实现这一点?

我认为您需要使用从
索引创建一个新列:

print (df2)
          lat       lon    val
7   48.010258 -6.156909  17.11
10  48.021648 -6.105887  22.23
12  48.033028 -6.054801  39.86
df = pd.merge(df1, 
              df2.reset_index().drop('val', axis=1).rename(columns={'index':'corr_pos'}), 
              on=['lat','lon'], 
              how='left')
print (df)
         lat       lon             E              N  corr_pos
0  48.010258 -6.156909  90089.518711 -201738.245555         7
1  48.021648 -6.105887  93961.324059 -200676.766517        10
2  48.033028 -6.054801  97836.321204 -199614.270439        12
如果
df2
有许多列,最好使用subset,因为merge将删除它们:

df = pd.merge(df1, 
              df2.reset_index()[['lat','lon', 'index']].rename(columns={'index':'corr_pos'}),
              on=['lat','lon'], 
              how='left')
print (df)
         lat       lon             E              N  corr_pos
0  48.010258 -6.156909  90089.518711 -201738.245555         7
1  48.021648 -6.105887  93961.324059 -200676.766517        10
2  48.033028 -6.054801  97836.321204 -199614.270439        12

@谢谢。如果我想将
corr\u pos
列添加到
df1
,而不是创建新的数据帧,该怎么办?当然,我不想丢失通信。嗯,有一个问题,您需要通过
2列
连接,因此无法使用。我不知道没有
merge
是可能的,也许
join
-所有方法都返回新的数据帧..但是我可以创建一个新的
df
,然后使用
map
将新列添加到
df1
。是的,但是map需要一个列映射到另一个值。如果选中参数上的
中只有一列,则可以使用
map
。但如果在=['val1','val2',…]上有多个as 1连接列
on
,则
map
解决方案是不可能的。
df = pd.merge(df1, 
              df2.reset_index()[['lat','lon', 'index']].rename(columns={'index':'corr_pos'}),
              on=['lat','lon'], 
              how='left')
print (df)
         lat       lon             E              N  corr_pos
0  48.010258 -6.156909  90089.518711 -201738.245555         7
1  48.021648 -6.105887  93961.324059 -200676.766517        10
2  48.033028 -6.054801  97836.321204 -199614.270439        12