#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
Необходимо внести два изменения:
- Убедитесь, что вы выбираете правильную строку при импорте
df2
. Используйтеheader=1
, если имена столбцов находятся в строке 1 вашего CSV. - Переименуйте столбец «тикер» в «индекс» (чтобы он соответствовал df1). Это должно сработать, и слияние должно работать правильно.
Комментарии:
1. Я попытался переименовать столбец, но теперь в df3 порядок тикеров такой же, как в df2, чего я не хочу, и у df3 те же проблемы, что и раньше, когда он неправильно объединялся