как использовать первые две строки в dataframe в качестве индексов столбцов в python

#python #pandas

#python #pandas

Вопрос:

У меня есть фрейм данных pandas, который представлял собой набор фреймов данных одной строки, объединенных вместе. Объединенный фрейм данных выглядит следующим образом:

 import pandas as pd

Type = ['Type','Category_A','Category_A','Category_B']
Year = ['Year','2020','2021','2020']
Group1 = ['Group1',123.45, 456.78, 678.90]
Group2 = ['Group2',999.23,1234.23,6543.23]
Group3 = ['Group3',12.45,546.12,6573.12]
Group4 = ['Group4',98.65, 657.34,654.78]

Type_df = pd.DataFrame([Type], columns=['Title','A','B','C'])
Year_df = pd.DataFrame([Year], columns=['Title','A','B','C'])
Group1_df = pd.DataFrame([Group1], columns=['Title','A','B','C'])
Group2_df = pd.DataFrame([Group2], columns=['Title','A','B','C'])
Group3_df = pd.DataFrame([Group3], columns=['Title','A','B','C'])
Group4_df = pd.DataFrame([Group4], columns=['Title','A','B','C'])

concat = pd.concat([Type_df, Year_df, Group1_df, Group2_df, Group3_df, Group4_df])

print(concat)
  

Вывод:

  Title           A           B           C
0    Type  Category_A  Category_A  Category_B
0    Year        2020        2021        2020
0  Group1      123.45      456.78       678.9
0  Group2      999.23     1234.23     6543.23
0  Group3       12.45      546.12     6573.12
0  Group4       98.65      657.34      654.78
  

Что я пытаюсь сделать, это взять первые две строки данных и превратить их в первые два столбца, затем создать следующие строки (Group1 — Group4) и сделать их столбцами 3-6. Итак, мой конечный результат будет выглядеть примерно так:

 Type         Year    Group1     Group2    Group3    Group4
Category_A   2020    123.45     999.23     12.45     98.65
Category_A   2021    456.78    1234.23    546.12    657.34
Category_B   2020     678.9    6543.23   6573.12    654.78
  

Я все еще новичок в Python, и я попробовал несколько разных версий pivot, pivot_table и melt, но, похоже, я никогда не смогу заставить его работать правильно. Буду признателен за любую помощь.

Ответ №1:

Измените свой код на

 Type_df = pd.DataFrame(Type, index=['Title','A','B','C']) # here change remove [] and make that the input from column to index 
Year_df = pd.DataFrame(Year, index=['Title','A','B','C'])
Group1_df = pd.DataFrame(Group1, index=['Title','A','B','C'])
Group2_df = pd.DataFrame(Group2, index=['Title','A','B','C'])
Group3_df = pd.DataFrame(Group3, index=['Title','A','B','C'])
Group4_df = pd.DataFrame(Group4, index=['Title','A','B','C'])
concat = pd.concat([Type_df, Year_df, Group1_df, Group2_df, Group3_df, Group4_df],axis=1)
concat
Out[963]: 
                0     0       0        0        0       0
Title        Type  Year  Group1   Group2   Group3  Group4
A      Category_A  2020  123.45   999.23    12.45   98.65
B      Category_A  2021  456.78  1234.23   546.12  657.34
C      Category_B  2020   678.9  6543.23  6573.12  654.78
concat.columns=concat.loc['Title',:]# do a little bit adjust here
concat.drop('Title',inplace=True)
concat
Out[966]: 
Title        Type  Year  Group1   Group2   Group3  Group4
A      Category_A  2020  123.45   999.23    12.45   98.65
B      Category_A  2021  456.78  1234.23   546.12  657.34
C      Category_B  2020   678.9  6543.23  6573.12  654.78
  

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

1. Спасибо, Вен-Бен, это сделало именно то, что я хотел. Я действительно ценю это.