Могу ли я искать значения, соответствующие результатам из другого фрейма данных?

#python #pandas

#python #pandas

Вопрос:

Я хочу сделать, это объединить значение из 2 фреймов данных, но они отличаются по форме и размеру.

Допустим, я хочу извлечь столбец D из одного фрейма данных и добавить его в другой

Фрейм данных1:

 A   B   C   D
1   1   0   2
1   4   0   1
1   0   2   4
2   2   3   0
2   1   0   1
  

Фрейм2 данных

 A   B   C   D
1   1   0   54
1   4   0   10
1   0   2   54
2   2   3   55
2   1   0   34
  

результат, который я ищу:

 A   B   C   D  newD
1   1   0   2  54
1   4   0   1  10
1   0   2   4  54
2   2   3   0  55
2   1   0   1  34
  

Я попробовал это

 DataFrame1['newD'] = DataFrame2.loc[DataFrame1[['A', 'B', 'C']] == DataFrame2['A', 'B', 'C']]['D']
  

но я получил ошибку ключевого слова: KeyError: ('A', 'B', 'C')

Есть ли простой способ получить этот результат?

дополнительный вопрос — Возможно ли иметь несколько критериев для поиска (т.Е. D not null или что-то в этом роде?)?

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

1. DataFrame2['A', 'B', 'C'] должно быть DataFrame2[['A', 'B', 'C']] . Но это исправляет только указанную ошибку.

Ответ №1:

Не так ли merge :

 pd.merge(df1,df2, on=['A','B','C'], how='left')
  

Вывод:

    A  B  C  D_x  D_y
0  1  1  0    2   54
1  1  4  0    1   10
2  1  0  2    4   54
3  2  2  3    0   55
4  2  1  0    1   34
  

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

1. Спасибо, это сработало в моем примере. Я только что попробовал это в своем конкретном случае использования, и я думаю, потому что один из моих столбцов числовой, а другой — строковый, я получаю эту ошибку: ValueError: вы пытаетесь объединить столбцы int64 и object. Если вы хотите продолжить, вам следует использовать pd.concat

2. Как указано в ошибке, у вас есть Int type в одном фрейме данных и object type в другом. Вам нужно дважды проверить df.dtypes .

3. Спасибо. Я не понимал, что это потому, что мои переменные не совпадают. отлично работает. Прямо сейчас он преобразует все .. если мне нужен только один столбец, есть ли способ выбрать столбец, который я хочу видеть (в данном случае D, а не все столбцы?)