Как объединить только определенный столбец фрейма данных в pandas?

#python #pandas #dataframe #merge

#python #pandas #фрейм данных #слияние

Вопрос:

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

df_1 = county_name accidents pedestrians
ADAMS 1 2
ALLEGHENY 1 3
ARMSTRONG 3 4
BEDFORD 1 1

df_2 = county_name population
ADAMS 102336
ALLEGHENY 1223048
ARMSTRONG 65642
BEDFORD 166140
BERKS 48480
BLAIR 417854
BRADFORD 123457
BUCKS 60853
CAMBRIA 628341

Результат, который я ищу, примерно такой. Где названия округов добавляются в столбец ‘county_name’, но не дублируются, а столбец ‘population’ не отображается.

df_outcome = county_name accidents pedestrians
ADAMS 1 2
ALLEGHENY 1 3
ARMSTRONG 3 4
BEDFORD 1 1
BERKS Nan Nan
BLAIR Nan Nan
BRADFORD Nan Nan
BUCKS Nan Nan
CAMBRIA Nan Nan

Наконец, я планирую использовать df_outcome.fillna(0) для замены всех Nan значений нулем.

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

1. можете ли вы скопировать данные и вставить в виде текста? изображения не могут быть скопированы и, следовательно, не могут быть воспроизведены

2. @anky извините, что я перепечатал как текст

Ответ №1:

Отфильтруйте столбец county_name и используйте merge с левым соединением:

 df = df_2[['county_name']].merge(df_1, how='left')
print (df)
  county_name  accidents  pedestrians
0       ADAMS        1.0          2.0
1   ALLEGHENY        1.0          3.0
2   ARMSTRONG        3.0          4.0
3     BEDFORD        1.0          1.0
4       BERKS        NaN          NaN
5       BLAIR        NaN          NaN
6    BRADFORD        NaN          NaN
7       BUCKS        NaN          NaN
8     CAMBRIA        NaN          NaN
  

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

1. @anky_91 Это действительно работает, но данные из df_1 теперь все NaN

2. @prime90 — Для меня хорошая работа, в столбце нет пробелов для отслеживания county_name ? Проверьте это с помощью print(df1['county_name'].tolist()[:20])

3. @anky_91 Странно, что я получаю, ValueError: Cannot convert non-finite values (NA or inf) to integer тип данных столбца population равен an int , поэтому я изменил его на float и получаю пустые скобки списка []

4. @prime90 — Каков ваш код? Можете ли вы отредактировать вопрос?

5. @anky_91 Я получал ошибку в своем коде из предыдущей правки, я забыл, что мне нужно изменить обратно. Спасибо. Это отлично сработало. Я понятия не имел, что вам нужно использовать двойные скобки для доступа к определенному столбцу. Спасибо!

Ответ №2:

Попробуйте:

 df = pd.merge(df1,df2[['county_name']], how='left')
  

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

1. @jezrael Если вы считаете, что это плагиат, вам следует установить флажок mod. Ответ не является низкокачественным

2. @Machavity — У меня отрицательный опыт, все мои флаги (2 раза) были отклонены … 🙁