Проблема с ignore_index и concat()

#python #pandas

#python #pandas

Вопрос:

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

Мой код выглядит примерно так:

 huh = pd.DataFrame(columns=['result'], data=['a','b','c','d'])
huh2 = pd.DataFrame(columns=['result2'], data=['aa','bb','cc','dd'])
huh2 = huh2.sort_values('result2', ascending=False)
tmp = pd.concat([huh,huh2], ignore_index=True, axis=1)
tmp
  

Из документации это выглядит как ignore_index флаг и axis=1 должно быть достаточным для достижения этого, но результаты явно расходятся.

Текущий вывод:

     0   1
0   a   aa
1   b   bb
2   c   cc
3   d   dd
  

Желаемый результат:

     result  result2
0   a       dd
1   b       cc
2   c       bb
3   d       aa
  

Ответ №1:

Если вы объединяете фреймы данных по горизонтали, то имена столбцов игнорируются. При объединении по вертикали индексы игнорируются. Вы можете игнорировать только один или другой, но не оба.

В вашем случае я бы рекомендовал установить индекс «huh2» таким же, как у «huh».

 pd.concat([huh, huh2.set_index(huh.index)], axis=1)

  result result2
0      a      dd
1      b      cc
2      c      bb
3      d      aa
  

Если вы не имеете дело с пользовательскими индексами, reset_index будет достаточно.

 pd.concat([huh, huh2.reset_index(drop=True)], axis=1)

  result result2
0      a      dd
1      b      cc
2      c      bb
3      d      aa