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

#python #pandas #dataframe

Вопрос:

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

итак, мой df1 выглядит так:

df1

Указатель ХУ TSLA брод YYX AAPL
среднее 24 51 25 35 34
станд 3 3 4 5 2
минута 1 2 4 5 6
максимум 78 78 97 89 97

df2

Указатель 10 11 62 454 988
тикер AAPL брод TSLA YYX ХУ
сектор Технологии Авто Технологии ETF ETF

В моем df2 информация импортирована из excel, поэтому имена столбцов являются его индексными номерами, которые мне не нужны. Названия тикеров также расположены в неправильном порядке, и мне нужны сектора, соответствующие тикерам. Идентификатор кадра данных, который требуется создать, выглядит следующим образом:

df3

Указатель ХУ TSLA брод YYX AAPL
среднее 24 51 25 35 34
станд 3 3 4 5 2
минута 1 2 4 5 6
максимум 78 78 97 89 97
сектор ETF Технологии Авто ETF Технологии

Я попытался установить индекс с помощью

 Industry = Industry.set_index('Index').T.set_index('ticker').T
 

но я получаю сообщение об ошибке, в котором говорится: «Ни один из [‘Индекс’] не указан в столбцах».

Я также пытался:

 df3 = pd.concat([df1,df2])
 

но он создает фрейм данных с df2, не соответствующим тикерам, и вместо этого помещает его рядом с df1.

Ответ №1:

 import pandas as pd

# Import the tables you provided, which I saved as CSVs
df1 = pd.read_csv('df1.csv')
df2 = pd.read_csv('df2.csv', header=1)

# Rename the "ticker" column so that all it is the same as the corresponding column name in df1
df2.rename(columns={'ticker': 'index'}, inplace=True)

# Concatenate
df3 = pd.concat([df1, df2])
df3
 

Необходимо внести два изменения:

  1. Убедитесь, что вы выбираете правильную строку при импорте df2 . Используйте header=1 , если имена столбцов находятся в строке 1 вашего CSV.
  2. Переименуйте столбец «тикер» в «индекс» (чтобы он соответствовал df1). Это должно сработать, и слияние должно работать правильно.

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

1. Я попытался переименовать столбец, но теперь в df3 порядок тикеров такой же, как в df2, чего я не хочу, и у df3 те же проблемы, что и раньше, когда он неправильно объединялся