2017-11-25 4 views
1

파이썬 팬더하여 피벗 엑셀 : I가 싶은편평한 내가 좋아 데이터 엑셀 피벗이

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 열째부터 모든 열을 추가하십시오. 끝까지 열 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 

가 어떻게 팬더를 사용하여 원하는 출력을 얻을 수 있나요?

답변

0

사용 melt :

df = df.melt(['Code','Region','Detail'], value_name='Change', var_name='Month') 
print (df) 
     Code Region  Detail Month Change 
0 AXISCGF zone 1 IND3D01024 Oct'17 -82,000 
1 AXISDEF zone 5 INP467B029 Oct'17 85,000 
2 AXISEAF zone 4 INZ514ELY4 Oct'17 -13,500 
3 AXISEQF zone 2 INQ916D14E Oct'17   0 
4 AXISCGF zone 1 IND3D01024 Sep'17   0 
5 AXISDEF zone 5 INP467B029 Sep'17 182,000 
6 AXISEAF zone 4 INZ514ELY4 Sep'17   0 
7 AXISEQF zone 2 INQ916D14E Sep'17 -500,000 
8 AXISCGF zone 1 IND3D01024 Aug'17 900,000 
9 AXISDEF zone 5 INP467B029 Aug'17   0 
10 AXISEAF zone 4 INZ514ELY4 Aug'17 5,00,000 
11 AXISEQF zone 2 INQ916D14E Aug'17 25,400 

stack 또 다른 솔루션 만 열에서 값의 순서가 달라질 있습니다 :

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

슈퍼 감사합니다. 지금 꽤 오랫동안 고투하고 있습니다. 두 가지 솔루션이 모두 잘 작동합니다. 다시 한번 감사합니다. – user3017186

+0

당신은 오신 것을 환영합니다! 가능하다면 upvote도 할 수 있습니다. 감사. – jezrael