Заменить значение в фрейме данных значением из другого фрейма данных - PullRequest
0 голосов
/ 12 апреля 2020

У меня проблема с заменой в python. Я пытаюсь заменить все целочисленное значение в столбце ORIGIN_AIRPORT из df_2 на столбец IATA из df_1. Ключевые столбцы: ORIGIN_AIRPOR T от df_2 и ID от df_1.

df_2 имеет около 5.800.000 наборов данных и df_1 около 6.400.

Я думаю, что есть простой способ сделать это, но я не знаю как.

df_1:

    ID      IATA
0   10001   01A
1   10003   03A
2   10004   04A
3   10005   05A
4   10006   06A
.
.
.

df_2:

        YEAR    MONTH   DAY DAY_OF_WEEK AIRLINE FLIGHT_NUMBER   TAIL_NUMBER ORIGIN_AIRPORT  DESTINATION_AIRPORT 
4385712 2015    10      1   4           AA      1230            N3DBAA      SEA             ANC 
4385713 2015    10      1   4           DL      1805            N696DL      10001           13487   
4385714 2015    10      1   4           NK      612             N602NK      10006           13487   
.
.
.

В конце df плеч выглядит как df_3.

df_3:

        YEAR    MONTH   DAY DAY_OF_WEEK AIRLINE FLIGHT_NUMBER   TAIL_NUMBER ORIGIN_AIRPORT  DESTINATION_AIRPORT 
4385712 2015    10      1   4           AA      1230            N3DBAA      SEA             ANC 
4385713 2015    10      1   4           DL      1805            N696DL      01A             13487   
4385714 2015    10      1   4           NK      612             N602NK      06A             13487   
.
.
.

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Я собираюсь написать простейшее решение для этого:

Шаг 1: преобразовать оба столбца из df_1 в словарь, используя следующий код:

d = dict(zip(df_1.ID,df_1.IATA))

Шаг 2: Теперь нам просто нужно отобразить этот словарь и df_2:

df_2.ORIGIN_AIRPORT= df_1.ID.map(d)
0 голосов
/ 12 апреля 2020

Вы можете выполнить левое объединение df_1 и df_2.

. Учитывая средний размер df1, вы можете просто создать правило отображения:

mapping = {}
for row in df_1.iterrows():
    mapping[row[0]] = row[1]

И создайте новый столбец:

df2['AIRPORT_PROCESSED'] = df2['ORIGIN_AIRPORT'].apply(lambda x: mapping.get(x, x))

Последняя функция заменит ORIGIN_AIRPORT значение для значения из сопоставления, если x находится в mapping.

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