2015-11-22 87 views
1

我有下面表在Excel(XLS)枢轴表:取消枢转/堆叠与Python熊猫

Quarter Q1 Q1 Q1 
Year 2013 2014 2015 
Company A  A  A 
PA  500 300 963 
NY  200 150 1500 

我想创建是下表通过使用Python熊猫:

Quarter Year State Company Amount 
Q1  2013 PA  A 500 
Q1  2014 PA  A 300 
Q1  2015 PA  A 963 
Q1  2013 NY  A 200 
Q1  2014 NY  A 150 
Q1  2015 NY  A 1500 

编辑: 我已经每@jezrael建议用下面的代码:

import pandas as p 
df = p.read_excel('test.xls') 
df = df.set_index('0') 
df = df.T.stack().reset_index(name='idx') 
df.columns = ['Quarter', 'Year', 'Company', 'State', 'Amount'] 
df = df[['Quarter', 'Year', 'State', 'Company', 'Amount']] 
df = df.sort_values(by=['State'], ascending=['False']).reset_index(drop=True) 
print(df) 

我一直得到下面的错误:

File "pandas\hashtable.pyx", line 676, in pandas.hashtable.PyObjectHashTable.get_item (pandas\hashtable.c:12216) 
KeyError: '0' 

我也试图与0,同样的错误与KeyError: 0

回答

1

非常接近你想要什么:

df = pd.read_excel('test.xls', header=None, index_col=0) 

print df 
#   1  2  3 
#0       
#Quarter Q1 Q1 Q1 
#Year  2013 2014 2015 
#Company  A  A  A 
#PA  500 300 963 
#NY  200 150 1500 

#set indexes 
df = df.T.set_index(['Quarter', 'Year', 'Company']) 

#stack and reset index 
df = df.stack().reset_index(name='idx') 

#rename and reorder columns 
df.columns = ['Quarter', 'Year', 'Company', 'State', 'Amount'] 
df = df[['Quarter', 'Year', 'State', 'Company', 'Amount']] 

#sort by column State 
df = df.sort_values(by=['State'], ascending=['False']).reset_index(drop=True) 
print df 
# Quarter Year State Company Amount 
#0  Q1 2013 NY  A 200 
#1  Q1 2014 NY  A 150 
#2  Q1 2015 NY  A 1500 
#3  Q1 2013 PA  A 500 
#4  Q1 2014 PA  A 300 
#5  Q1 2015 PA  A 963 
+1

,而不是'df.set_index (0)'你需要'df.set_index('0')'至少在python3.4和pandas 0.17.0 –

+0

你好,我已经尝试了上面的代码,既有0也有'0',因为我有Python 3.5和运行这两个代码后,我一直得到KeyError:0和KeyError:'0'。有什么建议?再次感谢你。 –

+1

什么是输入数据帧的列名称?您可以检查它:'print df.columns' – jezrael