如何将数据框的第一行转换为列

How to convert the first row of the dataframe to a column

我正在使用 pandas,我正在尝试将数据帧的第一行转换为一列,我尝试了 stack() 函数,但它看起来像 f%#¤ed。我不能真正使用 stack(),因为我有不同的 headers 列。比方说,您的数据框如下所示:(红色框:我的数据框的外观(黄色框:我希望我的数据框的外观)

如果你能帮助我,我将不胜感激。

干杯,

IIUC:

In [199]: df = pd.DataFrame(np.random.randint(5, size=(5,3)), columns=list('abc'))

In [200]: df
Out[200]:
   a  b  c
0  4  4  0
1  3  3  0
2  4  3  3
3  3  2  0
4  1  0  4

In [201]: df.columns
Out[201]: Index(['a', 'b', 'c'], dtype='object')

In [202]: df, df.columns, df.columns.name = df.iloc[1:], df.iloc[0].astype(str), None

In [203]: df
Out[203]:
   4  4  0
1  3  3  0
2  4  3  3
3  3  2  0
4  1  0  4

In [204]: df.columns
Out[204]: Index(['4', '4', '0'], dtype='object')

我认为你需要:

df = df.stack().rename_axis(('a','b','c')).reorder_levels([2,0,1]).sort_index() 
print (df)
c     a  b 
2014  A  A1    1
         A1    9
      B  B1    9
         B2    1
2015  A  A1    5
         A1    4
      B  B1    1
         B2    7
2016  A  A1    5
         A1    1
      B  B1    6
         B2    7
dtype: int64

如果需要 columns 来自 Multiindex:

df = df.stack()
       .rename_axis(('a','b','c'))
       .reorder_levels([2,0,1])
       .sort_index()
       .reset_index(name='count')
print (df)

       c  a   b  count
0   2014  A  A1      1
1   2014  A  A1      9
2   2014  B  B1      9
3   2014  B  B2      1
4   2015  A  A1      5
5   2015  A  A1      4
6   2015  B  B1      1
7   2015  B  B2      7
8   2016  A  A1      5
9   2016  A  A1      1
10  2016  B  B1      6
11  2016  B  B2      7

编辑:

您需要通过参数 index_col:

将第一列和第二列转换为 Multiindex 时出现问题
tab3 = "C:\Users\abk29\NordicMontlyDemand\NordicDY\Book1.xls"
df = pd.read_excel(tab3, sheetname="Sheet1", skiprows=2, index_col=[0,1])
print (df)
              2016  2017  2018
  Unnamed: 1                  
A A1             1     1     1
  A2             2     2     2
B B1             3     3     3
  B2             4     4     4
df = df.stack().rename_axis(('a','b','c')).reorder_levels([2,0,1]).sort_index()
print (df)
c     a  b 
2016  A  A1    1
         A2    2
      B  B1    3
         B2    4
2017  A  A1    1
         A2    2
      B  B1    3
         B2    4
2018  A  A1    1
         A2    2
      B  B1    3
         B2    4
dtype: int64