#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, а не все столбцы?)