Reputation: 4452
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
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
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