#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, но это отлично работает, я думал, что будет другой вариант, но давайте тогда оставим его таким. Спасибо