Я думаю, что вы ищете merge
ваших фреймов данных. Если ваш первый кадр данных df_1
, а второй df_2
, попробуйте следующее:
df_1.merge(df_2, left_on = 'Origin', right_on='Station', how='left').drop('Station', axis=1)
Что возвращает:
Origin Coordinates Time Zone
0 Victoria x,y 15:32 1.0
1 Wembley x,y 14:00 NaN
2 Canary Wharf x,y 11:00 NaN
3 Stratford x,y 09:00 2.0
Обратите внимание, что NaN
есть, потому что вам не хватает данных Zone
в ваших df_2
для этих станций.
Объяснение : здесь используется merge
, который объединяет два ваших кадра данных, где df_1['Origin']
соответствует df_2['Station']
. Я выбрал how = 'left'
, чтобы он не удалял строки из левого кадра данных (df_1
), где отсутствуют данные, и, наконец, удалил дополнительный столбец Station
, который не нужен для ваших целей.
Что касается того, почему вы получаете эту ошибку, я думаю, что есть несколько вещей, которые ваш код пытается сделать, которые не работают, но главное, что бросается в глаза, это то, что вы звоните getZone
с pd.Series
в качестве аргумента, поэтому он пытается сравнить ваш stations
фрейм данных (который в вашем примере имеет длину 4) с вашим df['Origin']
(который имеет длину 3). Даже если длины и индексы совпадают, я не уверен, что это достигнет того, что вы хотели. Вы можете сделать это с помощью цикла и оператора .loc
, но это будет неуклюже. merge
существует по этим причинам!