xyhuang
xyhuang

Reputation: 424

How to merge back dataframe from a pivot operation?

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

Answers (1)

jezrael
jezrael

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

Related Questions