Reputation: 424
pivot is a elegant operation in pandas.
but is there any methods can merge pivot dataframe back?
let me list an example:
In [10]: df = pd.DataFrame([['a','2019', 1], ['b', '2019', 2], ['c', '2019',2], ['d','2019',3], ['e', '2009',1], ['f', '2012', 3]])
In [11]: df
Out[11]:
0 1 2
0 a 2019 1
1 b 2019 2
2 c 2019 2
3 d 2019 3
4 e 2009 1
5 f 2012 3
In [12]: df.columns = ['name', 'year', 'value1']
In [13]: df['value2'] = 4
In [14]: df
Out[14]:
name year value1 value2
0 a 2019 1 4
1 b 2019 2 4
2 c 2019 2 4
3 d 2019 3 4
4 e 2009 1 4
5 f 2012 3 4
here i created a dataframe, then i use pivot function:
In [15]: a = df.pivot('name', 'year', 'value1')
Out[15]:
year 2009 2012 2019
name
a NaN NaN 1.0
b NaN NaN 2.0
c NaN NaN 2.0
d NaN NaN 3.0
e 1.0 NaN NaN
f NaN 3.0 NaN
In [16]: b = df.pivot('name', 'year', 'value2')
Out[16]:
year 2009 2012 2019
name
a NaN NaN 4.0
b NaN NaN 4.0
c NaN NaN 4.0
d NaN NaN 4.0
e 4.0 NaN NaN
f NaN 4.0 NaN
as i expected, i have two good dataframe which only contains value1 and value2.
my question is: how can i get df
back from a
and b
?
is there any elegant methods?
Upvotes: 2
Views: 36
Reputation: 863166
Use concat
with DataFrame.stack
and DataFrame.unstack
:
df = pd.concat([a.stack(), b.stack()], keys=('value1','value2')).unstack(0).reset_index()
print (df)
name year value1 value2
0 a 2019 1.0 4.0
1 b 2019 2.0 4.0
2 c 2019 2.0 4.0
3 d 2019 3.0 4.0
4 e 2009 1.0 4.0
5 f 2012 3.0 4.0
Upvotes: 4