Reputation: 266
i have table following like
mark name total point
70 bala 100 10
80 bala 100 10
80 bala 100 10
100 karthik 100 5
100 karthik 150 5
100 karthik 150 5
50 abdul 80 10
50 abdul 80 5
50 abdul 80 6
i want to split this table following (remove duplicate column based on name and unique column will be seperated by comma )
mark name total point
70,80 bala 100 10
100 karthik 100,150 5
50 abdul 80 10,5,6
Upvotes: 2
Views: 708
Reputation: 862441
Use DataFrameGroupBy.agg
:
df = (df.astype(str)
.groupby('name', as_index=False, sort=False)
.agg(lambda x: ','.join(x.unique())))
print (df)
name mark total point
0 bala 70,80 100 10
1 karthik 100 100,150 5
2 abdul 50 80 10,5,6
Upvotes: 2
Reputation: 30605
With the help of pivot table
df.pivot_table(index='name',aggfunc=lambda x : ','.join(x.unique().astype(str))).reset_index()
Output:
name mark point total 0 abdul 50 10,5,6 80 1 bala 70,80 10 100 2 karthik 100 5 100,150
Upvotes: 2
Reputation: 76917
Use
In [858]: (df.astype(str).groupby('name', as_index=False, sort=False)
.apply(lambda x: pd.Series({v: ','.join(x[v].unique()) for v in x})))
Out[858]:
mark name total point
0 70,80 bala 100 10
1 100 karthik 100,150 5
2 50 abdul 80 10,5,6
Or,
In [863]: (df.astype(str).groupby('name', as_index=False, sort=False)
.apply(lambda x: x.apply(lambda x: ','.join(x.unique()))))
Out[863]:
mark name total point
0 70,80 bala 100 10
1 100 karthik 100,150 5
2 50 abdul 80 10,5,6
Upvotes: 3