Petr Petrov
Petr Petrov

Reputation: 4452

Pandas: change view of dataframe

I have dataframe

id      domain
111      vk.com
111      facebook.com
111      twitter.com
222      avito.ru
222      vk.com

Desire output

id    domain1    domain2   domain3
111   vk.com   facebook.com  twitter.com
222   avito.ru    vk.com      NaN

I try transpose df.T, but it works otherwise

Upvotes: 0

Views: 182

Answers (2)

BENY
BENY

Reputation: 323326

By using pd.crosstab

    pd.crosstab(index=df.id,columns=df.groupby('id').cumcount().add(1),values=df.domain,aggfunc='sum').\
               add_prefix('domain')
Out[570]: 
col_0   domain1       domain2      domain3
id                                        
111      vk.com  facebook.com  twitter.com
222    avito.ru        vk.com         None

Upvotes: 2

MaxU - stand with Ukraine
MaxU - stand with Ukraine

Reputation: 210902

In [34]: df.assign(x=df.groupby('id').cumcount()+1) \
    ...:   .pivot(index='id', columns='x', values='domain') \
    ...:   .add_prefix('domain') \
    ...:   .rename_axis(None, 1) \
    ...:   .reset_index()
    ...:
Out[34]:
    id   domain1       domain2      domain3
0  111    vk.com  facebook.com  twitter.com
1  222  avito.ru        vk.com         None

or

In [38]: df.assign(x=df.groupby('id').cumcount()+1) \
    ...:   .set_index(['id','x']) \
    ...:   ['domain'].unstack('x') \
    ...:   .rename_axis(None, 1) \
    ...:   .reset_index()
    ...:
Out[38]:
    id         1             2            3
0  111    vk.com  facebook.com  twitter.com
1  222  avito.ru        vk.com         None

Upvotes: 2

Related Questions