Balakrishnan
Balakrishnan

Reputation: 266

Joining column values in a table - pandas

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

Answers (3)

jezrael
jezrael

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

Bharath M Shetty
Bharath M Shetty

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

Zero
Zero

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

Related Questions