2017-07-31 97 views
-1

我正在使用熊猫,并试图将数据帧的第一行转换为列,我试过了堆栈()函数,但它看起来像F%#¤ed。我不能真正使用堆栈(),因为我有不同的标题列。比方说,你的数据帧看起来如下:(红框:我的数据框看起来像(黄框:我多么希望我的数据框的样子) enter image description here如何将数据帧的第一行转换为列

我gratefull如果你能帮助我

干杯,

+1

你可以添加一些样品? – jezrael

+0

还是你需要'df = df.iloc [0] .to_frame()'? – jezrael

回答

1

我想你需要:

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 

如果需要columnsMultiindex

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 

编辑:

有你需要的第一和第二列转换为Multiindex通过参数index_col问题:

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 
+0

仍然很奇怪的结果:/ – BEAst

+0

你可以检查编辑答案? – jezrael

+0

这是一个非常好的解决方案,但堆栈功能是主要关键/问题,它说我只有一个级别而不是三个,所以我不能重新排序... – BEAst

1

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') 
相关问题