2017-09-19 2 views
2

ich habe folgende Tabelle wieJoining Spaltenwerte in einer Tabelle - Pandas

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 Anschluss an diese Tabelle geteilt werden soll (um doppelte Spalte basierend auf Namen und eindeutige Spalte werden durch Komma getrennt werden)

mark  name  total point 
70,80  bala  100  10 
100  karthik 100,150  5 
50  abdul 80  10,5,6 

Antwort

3

Verwenden

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 

Oder

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 
+0

einfach klasse. es funktioniert – balakrishnan

+0

Wir können das auch in Pivot-Tabelle tun. So können wir viele Parameter speichern :). Und +1 für die Aufrechterhaltung der Reihenfolge. – Dark

2

Mit Hilfe von Pivot-Tabelle

df.pivot_table(index='name',aggfunc=lambda x : ','.join(x.unique().astype(str))).reset_index() 

Ausgang:

 
    name mark point total 
0 abdul  50 10,5,6  80 
1  bala 70,80  10  100 
2 karthik 100  5 100,150 
2

Verwendung 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