Отображение нового столбца в DataFrame по строкам из другого DataFrame - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть Pandas DataFrame stations с индексом в виде идентификатора:

id    station     lat     lng
1     Boston      45.343  -45.333
2     New York    56.444  -35.690

У меня есть другой DataFrame df1, который имеет следующее:

duration   date       station   gender
NaN        20181118   NaN       M
9          20181009   2.0       F
8          20170605   1.0       F

Я хочу добавитьна df1, чтобы он выглядел как следующий DataFrame:

duration   date       station   gender  lat     lng 
NaN        20181118   NaN       M       nan     nan
9          20181009   New York  F       56.444  -35.690
8          20170605   Boston    F       45.343  -45.333

Я попытался сделать это итеративно, ссылаясь на station.iloc[], как показано в следующем примере, но у меня есть около 2 мил строк, и он закончилсязанимая много времени.

stat_list = []    
lng_list []
lat_list = []
for stat in df1:
  if not np.isnan(stat):
        ref = station.iloc[stat]
        stat_list.append(ref.station)
        lng_list.append(ref.lng)
        lat_list.append(ref.lat)
  else:
        stat_list.append(np.nan)
        lng_list.append(np.nan)
        lat_list.append(np.nan)

Есть ли более быстрый способ сделать это?

1 Ответ

0 голосов
/ 25 ноября 2018

Похоже, что это было бы лучше всего решить с помощью слияния, которое должно значительно повысить производительность:

df1.merge(stations, left_on="station", right_index=True, how="left")

Это оставит вас с двумя столбцами station_x и station_y, если вам нужен только столбец станции симена строк в вас могут сделать:

df_merged = df1.merge(stations, left_on="station", right_index=True, how="left", suffixes=("_x", ""))
df_final = df_merged[df_merged.columns.difference(["station_x"])]

(или просто переименовать одно из них перед слиянием)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...