Pandas левое соединение, где значения NA в правой таблице принимаются как подстановочный знак - PullRequest
0 голосов
/ 26 мая 2020

Кто-нибудь знает эффективный способ объединения 2 фреймов данных в нескольких столбцах с использованием значений NA в качестве подстановочных знаков?

Пример моего варианта использования:

У меня есть фрейм данных df_a вот так:

stop1   stop2   stop3   stop4   stop5   stop6   stop7
ES       IT      GB      DE      AT      US      CA
ES       IT      DE      CH         

И фрейм данных df_p с такими шаблонами действий (последовательность стопов и действий, которые могут содержать или не содержать значения NA):

stop1   act1    stop2   act2    stop3   act3    stop4     act4
ES      sell     IT                             
ES      sell     IT     sell                      DE      buy
DE      buy      CH                         

Я хотел бы оставить соединение df_a и df_p и назначить шаблон с совпадениями столбцов, принимая нулевые значения как comodin

В этом случае ожидаемый результат должен быть:

stop1   act1   stop2    act2   stop3    act3   stop4    act4    stop5   act5    stop6   act6   stop7
ES      sell    IT      sell    GB               DE      buy     AT              US             CA
ES      sell    IT              DE      buy      CH         

Первая строка соответствует шаблону в строках 1 и 2, но строка 2 соответствует большему количеству строк, поэтому мы назначаем ее. Вторая строка совпадает в начале шаблона маршрута 1 и в конце шаблона маршрута 3, поэтому мы назначаем оба.

Я работаю с большим количеством данных, поэтому мне нужен эффективный способ сделать это . Кроме того, как вы думаете, что лучше сделать итерацию строка за строкой или использовать pd.merge?

Заранее спасибо,

Альберто

1 Ответ

0 голосов
/ 26 мая 2020

Лучший способ сделать это - использовать merge. Он будет искать общие столбцы, если вы не укажете их:

df = df_a.merge(df_p, how='left')
df.fillna('', inplace=True)
print(df)

  stop1 stop2 stop3 stop4 stop5 stop6 stop7 act1 act2 act3 act4
0    ES    IT    GB    DE    AT    US    CA
1    ES    IT    DE    CH             
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...