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

2024-09-24 00:30:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用pandas,我试图将dataframe的第一行转换为列,我尝试过stack()函数,但它看起来像f%#ed。我不能真正使用stack(),因为我有不同标题的列。假设您的数据帧如下所示:(红框:我的数据框是什么样的(黄框:我希望我的数据框看起来像什么样) enter image description here

如果你能帮我,我很感激。在

干杯


Tags: 数据函数标题dataframepandasstacked干杯
2条回答

我认为你需要:

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

^{pr2}$

编辑:

您需要通过参数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

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')

相关问题 更多 >