2017-02-01 19 views
1

у меня есть dataframe df1 координатных значений, как это:Панды: вертикальный смотреть с двумя dataframes

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 
... ...   ...   ...    ... 

и другой dataframe df2, который связывает климатическое значение каждого (широта, долгота) пары:

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, соответствующий (широта, долгота) пара в df1. Это похоже на использование VLOOKUP в Excel, но с использованием двух значений для определения правильного индекса вместо использования только одного. Эти два значения представляют собой координатную пару.

Выход будет:

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 
... ...   ...   ...    ...    ... 

В dataframes df1 и df2не имеют одинаковый порядок. Как я мог реализовать это в пандах?

ответ

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 
+1

@ CF84 - Спасибо. – jezrael

+0

Нет, я должен поблагодарить вас первым! lol – FaCoffee

+0

Что делать, если я хочу добавить столбец 'corr_pos' в' df1' вместо того, чтобы создавать новый dataframe? Конечно, я не хочу терять соответствия. – FaCoffee

 Смежные вопросы

  • Нет связанных вопросов^_^