我的表格如下
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
我想拆分此表(根据名称删除重复列,唯一列将以逗号分隔)
mark name total point
70,80 bala 100 10
100 karthik 100,150 5
50 abdul 80 10,5,6
答案 0 :(得分:3)
使用
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
或者,
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
答案 1 :(得分:2)
借助数据透视表
df.pivot_table(index='name',aggfunc=lambda x : ','.join(x.unique().astype(str))).reset_index()
输出:
name mark point total 0 abdul 50 10,5,6 80 1 bala 70,80 10 100 2 karthik 100 5 100,150
答案 2 :(得分:2)
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