我有一个坐标值的数据框df1
,如下所示:
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
将气候值与每个(lat,lon)对相关联:
lat lon val
0 48.010258 -6.156909 17.11
1 48.021648 -6.105887 22.23
2 48.033028 -6.054801 39.86
... ... ... ...
我想创建一个新列df1['corr_pos']
,其中每一行的df2
索引对应{{1>中的(lat,lon)对}}。这就像在Excel中使用 VLOOKUP ,但使用两个值来标识正确的索引而不是仅使用一个。这两个值是坐标对。
输出结果为:
df1
数据框 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
没有具有相同的顺序。 我怎么能在熊猫中实现这个?
答案 0 :(得分:1)
我认为您需要merge
与reset_index
一起创建index
的新列:
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
有很多列,最好使用子集,因为合并会删除它们:
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