I’ve a sample dataframe
JavaScript
x
6
1
region headquarter sales base %growth month_year
2
X Los Angeles 1000 2000 30 202101
3
X Florida City 2000 2000 20 202101
4
X Los Angeles 5000 6000 70 202001
5
X Florida City 4000 4500 45 202001
6
I’m trying to pivot the data using
JavaScript
1
11
11
1
data = data.pivot_table(columns=['month_year'], values=['sales', 'base', '%growth'], index=['region', 'headquarter'])
2
3
print(data)
4
5
> %growth base sales
6
| | 202001 202101 202001 202101 202001 202101
7
-----------------------------------------------------------------------
8
region | headquarter |
9
x | Los Angeles | 70 30 6000 2000 5000 1000
10
| Florida City | 45 20 4000 2000 4500 2000
11
The values are not in order which I’ve mentioned in the above snippet.
How can I re-structure my data to (by also repeating the row labels)
JavaScript
1
6
1
> 202001 202101
2
Sales base %growth Sales base %growth
3
region headquarter
4
X Los Angeles 5000 6000 70 1000 2000 30
5
X Florida City 4500 4000 45 2000 2000 20
6
Advertisement
Answer
Use DataFrame.swaplevel
with DataFrame.reindex
:
JavaScript
1
12
12
1
mux = pd.MultiIndex.from_product([data['month_year'].unique(), ['Sales','base','%growth']])
2
data = data.pivot_table(columns=['month_year'],
3
values=['Sales', 'base', '%growth'],
4
index=['headquarter']).swaplevel(1, 0, axis=1).reindex(mux, axis=1)
5
6
print(data)
7
202101 202001
8
Sales base %growth Sales base %growth
9
headquarter
10
Florida City 2000 2000 20 4000 4500 45
11
Los Angeles 1000 2000 30 5000 6000 70
12
EDIT:
JavaScript
1
15
15
1
mux = pd.MultiIndex.from_product([data['month_year'].unique(), ['sales','base','%growth']])
2
3
4
data = data.pivot_table(columns=['month_year'],
5
values=['sales', 'base', '%growth'],
6
index=['region', 'headquarter']).swaplevel(1, 0, axis=1).reindex(mux, axis=1)
7
8
9
print (data)
10
202101 202001
11
sales base %growth sales base %growth
12
region headquarter
13
X Florida City 2000 2000 20 4000 4500 45
14
Los Angeles 1000 2000 30 5000 6000 70
15