使用python展开/取消堆栈excel pivot
我有一个excel pivot,其中包含以下数据:使用python展开/取消堆栈excel pivot,python,excel,pandas,pivot-table,Python,Excel,Pandas,Pivot Table,我有一个excel pivot,其中包含以下数据: Code Region Detail Oct'17 Sep'17 Aug'17 AXISCGF zone 1 IND3D01024 -82,000 0 900,000 AXISDEF zone 5 INP467B029 85,000 182,000 0 AXISEAF zone 4 INZ514ELY4 -13,500 0 5,
Code Region Detail Oct'17 Sep'17 Aug'17
AXISCGF zone 1 IND3D01024 -82,000 0 900,000
AXISDEF zone 5 INP467B029 85,000 182,000 0
AXISEAF zone 4 INZ514ELY4 -13,500 0 5,00,000
AXISEQF zone 2 INQ916D14E 0 -500,000 25,400
我希望得到的结果是:
Code Region Detail Month Change
AXISCGF zone 1 IND3D01024 Oct'17 -82,000
AXISDEF zone 5 INP467B029 Oct'17 85,000
..
AXISCGF zone 1 IND3D01024 Sep'17 0
AXISDEF zone 5 INP467B029 Sep'17 182,000
我希望前三列保持原样,然后从第四列开始追加所有列。我能够在第4列循环到最后。我的代码:
import pandas
df = pandas.read_excel('Data_2017.xlsx', sheet_name='Sales')
for data_column in df.columns[3:10]:
df_new = df.filter(['Code','Region','Detail',data_column])
#print df_new.head()
df_new.to_csv('_TEST_Output.csv',mode='a')
输出:
Code Region Detail Oct'17
0 AXISCGF zone 1 IND3D01024 -82,000
1 AXISDEF zone 5 INP467B029 85,000
..
3501 AXISESF zone 3 INO0201062 0
Code Region Detail Sep'17
0 AXISDEF zone 5 INP467B029 182,000
如何使用pandas获得所需的输出?使用:
另一种解决方案具有,但列中的值顺序不同:
df = (df.set_index(['Code','Region','Detail'])
.stack()
.reset_index(name='Change')
.rename(columns={'level_3':'Month'}))
print (df)
Code Region Detail Month Change
0 AXISCGF zone 1 IND3D01024 Oct'17 -82,000
1 AXISCGF zone 1 IND3D01024 Sep'17 0
2 AXISCGF zone 1 IND3D01024 Aug'17 900,000
3 AXISDEF zone 5 INP467B029 Oct'17 85,000
4 AXISDEF zone 5 INP467B029 Sep'17 182,000
5 AXISDEF zone 5 INP467B029 Aug'17 0
6 AXISEAF zone 4 INZ514ELY4 Oct'17 -13,500
7 AXISEAF zone 4 INZ514ELY4 Sep'17 0
8 AXISEAF zone 4 INZ514ELY4 Aug'17 5,00,000
9 AXISEQF zone 2 INQ916D14E Oct'17 0
10 AXISEQF zone 2 INQ916D14E Sep'17 -500,000
11 AXISEQF zone 2 INQ916D14E Aug'17 25,400
使用:
另一种解决方案具有,但列中的值顺序不同:
df = (df.set_index(['Code','Region','Detail'])
.stack()
.reset_index(name='Change')
.rename(columns={'level_3':'Month'}))
print (df)
Code Region Detail Month Change
0 AXISCGF zone 1 IND3D01024 Oct'17 -82,000
1 AXISCGF zone 1 IND3D01024 Sep'17 0
2 AXISCGF zone 1 IND3D01024 Aug'17 900,000
3 AXISDEF zone 5 INP467B029 Oct'17 85,000
4 AXISDEF zone 5 INP467B029 Sep'17 182,000
5 AXISDEF zone 5 INP467B029 Aug'17 0
6 AXISEAF zone 4 INZ514ELY4 Oct'17 -13,500
7 AXISEAF zone 4 INZ514ELY4 Sep'17 0
8 AXISEAF zone 4 INZ514ELY4 Aug'17 5,00,000
9 AXISEQF zone 2 INQ916D14E Oct'17 0
10 AXISEQF zone 2 INQ916D14E Sep'17 -500,000
11 AXISEQF zone 2 INQ916D14E Aug'17 25,400
非常感谢。已经挣扎了很长一段时间了。这两种解决方案都非常有效。再次感谢。不客气!如果可能的话,你也可以投票。谢谢,非常感谢。已经挣扎了很长一段时间了。这两种解决方案都非常有效。再次感谢。不客气!如果可能的话,你也可以投票。谢谢