Sunday, April 22, 2018

Melt in Pandas

In [14]: sales=pd.read_csv('pandas/pandas/quarters.csv')

In [15]: sales
Out[15]: 
  Salesman      Q1      Q2      Q3      Q4
0    Boris  602908  233879  354479   32704
1      Bob   43790  514863  297151  544493
2    Tommy  392668  113579  430882  247231
3   Travis  834663  266785  749238  570524
4   Donald  580935  411379  110390  651572
5      Ted  656644   70803  375948  321388
6      Jeb  486141  600753  742716  404995
7    Stacy  479662  742806  770712    2501
8   Morgan  992673  879183   37945  293710

In [17]: pd.melt(sales,id_vars='Salesman')
Out[17]: 
   Salesman variable   value
0     Boris       Q1  602908
1       Bob       Q1   43790
2     Tommy       Q1  392668
3    Travis       Q1  834663
4    Donald       Q1  580935
5       Ted       Q1  656644
6       Jeb       Q1  486141
7     Stacy       Q1  479662
8    Morgan       Q1  992673
9     Boris       Q2  233879
10      Bob       Q2  514863
11    Tommy       Q2  113579
12   Travis       Q2  266785
13   Donald       Q2  411379
14      Ted       Q2   70803
15      Jeb       Q2  600753
16    Stacy       Q2  742806
17   Morgan       Q2  879183
18    Boris       Q3  354479
19      Bob       Q3  297151
20    Tommy       Q3  430882
21   Travis       Q3  749238
22   Donald       Q3  110390
23      Ted       Q3  375948
24      Jeb       Q3  742716
25    Stacy       Q3  770712
26   Morgan       Q3   37945
27    Boris       Q4   32704
28      Bob       Q4  544493
29    Tommy       Q4  247231
30   Travis       Q4  570524
31   Donald       Q4  651572
32      Ted       Q4  321388
33      Jeb       Q4  404995
34    Stacy       Q4    2501
35   Morgan       Q4  293710

In [21]: pd.melt(sales,id_vars='Salesman',var_name='Quarter',value_name='Revenue')
Out[21]: 
   Salesman Quarter  Revenue
0     Boris      Q1   602908
1       Bob      Q1    43790
2     Tommy      Q1   392668
3    Travis      Q1   834663
4    Donald      Q1   580935
5       Ted      Q1   656644
6       Jeb      Q1   486141
7     Stacy      Q1   479662
8    Morgan      Q1   992673
9     Boris      Q2   233879
10      Bob      Q2   514863
11    Tommy      Q2   113579
12   Travis      Q2   266785
13   Donald      Q2   411379
14      Ted      Q2    70803
15      Jeb      Q2   600753
16    Stacy      Q2   742806
17   Morgan      Q2   879183
18    Boris      Q3   354479
19      Bob      Q3   297151
20    Tommy      Q3   430882
21   Travis      Q3   749238
22   Donald      Q3   110390
23      Ted      Q3   375948
24      Jeb      Q3   742716
25    Stacy      Q3   770712
26   Morgan      Q3    37945
27    Boris      Q4    32704
28      Bob      Q4   544493
29    Tommy      Q4   247231
30   Travis      Q4   570524
31   Donald      Q4   651572
32      Ted      Q4   321388
33      Jeb      Q4   404995
34    Stacy      Q4     2501
35   Morgan      Q4   293710


In [24]: sales.set_index('Salesman').stack().to_frame()
Out[24]: 
                  0
Salesman           
Boris    Q1  602908
         Q2  233879
         Q3  354479
         Q4   32704
Bob      Q1   43790
         Q2  514863
         Q3  297151
         Q4  544493
Tommy    Q1  392668
         Q2  113579
         Q3  430882
         Q4  247231
Travis   Q1  834663
         Q2  266785
         Q3  749238
         Q4  570524
Donald   Q1  580935
         Q2  411379
         Q3  110390
         Q4  651572
Ted      Q1  656644
         Q2   70803
         Q3  375948
         Q4  321388
Jeb      Q1  486141
         Q2  600753
         Q3  742716
         Q4  404995
Stacy    Q1  479662
         Q2  742806
         Q3  770712
         Q4    2501
Morgan   Q1  992673
         Q2  879183
         Q3   37945

         Q4  293710