user2725109
user2725109

Reputation: 2386

pandas dataframe reshape / pivot

I'd like to convert the following pandas dataframe

    a   b
0   1   2
1   1   5
2   2   4
3   1   3
4   3   7
5   2   1

to

    0   1   2
a           
1   2   5   3  
2   4   1   NaN
3   7   NaN NaN

Do you know an easy way?

Upvotes: 2

Views: 216

Answers (1)

Andy Hayden
Andy Hayden

Reputation: 375915

I would do this as follows:

In [11]: df.groupby("a")["b"].apply(lambda x: pd.Series(x.values))
Out[11]:
a
1  0    2
   1    5
   2    3
2  0    4
   1    1
3  0    7
Name: b, dtype: int64

to get the form you wanted you then unstack (though probably above better):

In [22]: df.groupby('a')["b"].apply(lambda x: pd.Series(x.values)).unstack(1)
Out[22]:
     0    1    2
a
1  2.0  5.0  3.0
2  4.0  1.0  NaN
3  7.0  NaN  NaN

Upvotes: 2

Related Questions