логическая индексация фрейма данных pandas с несколькими условиями из другого df

#python #pandas #dataframe

Вопрос:

Я пытаюсь определить строки между 2 df, которые имеют одинаковые значения для некоторых столбцов для одной и той же строки.

Пример:

 import pandas as pd
df = pd.DataFrame([{'energy': 'power', 'id': '123'}, {'energy': 'gas', 'id': '456'}])
df2 = pd.DataFrame([{'energy': 'power', 'id': '456'}, {'energy': 'power', 'id': '123'}])
 

df =

    energy   id
0  power  123
1    gas  456
 

df2 =

    energy     id
0  power    456
1  power    123
 

Поэтому я пытаюсь получить строки из df, где энергия и идентификатор совпадают точно в той же строке в df2.
Если я поступлю так, то получу ложный результат:

 df2.loc[(df2['energy'].isin(df['energy'])) amp; (df2['id'].isin(df['id']))]
 

потому что это будет соответствовать 2 строкам df2, тогда как я ожидал бы, что будет соответствовать только power / 123

Как мне выполнить логическую индексацию с несколькими «динамическими» условиями на основе других строк df и сопоставлением значений для тех же строк в другом df ?

Надеюсь, это ясно

Комментарии:

1. Похоже на внутреннее слияние: df.merge(df2) ? конечно, вы можете выбрать общие ключи для объединения

Ответ №1:

 pd.merge(df, df2, on=['id','energy'], how='inner')
 

Комментарии:

1. Да, это действительно работает так, если вы хотите выполнить как стандартную логическую индексацию, так и слияние, вам нужно 2 строки вместо 1, но это отлично работает, я думал, что будет другой вариант, но давайте тогда оставим его таким. Спасибо