使用Python Pandas取消透视/堆叠数据透视表

时间:2015-11-22 01:40:41

标签: python pandas

我在excel(xls)中有下表:

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

我想创建的是使用Python Pandas创建的下表:

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 个答案:

答案 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