2017-02-03 2 views
1

Ich habe eine df so dassPandas: Effiziente Weise Werte zu verbinden in nur ausgewählten Spalten in einem gruppierten Datenrahmen

LAST_MOD_DATE  ID TITLE   TXT_ID    TXT 
0 1486047205463  2 TITLE-2  7     ABC 
1 1486047205463  2 TITLE-2  5     XYZ 
2 1486047205463  2 TITLE-2  6     MNQ 

Ich mag wäre es von ID-Gruppe, um sie in eine einzige Reihe zu glätten. Die Felder mit unterschiedlichen Werten TXT_ID und TXT werden zu einem mit Komma getrennten Werten kombiniert. So etwas wie unten:

ID 
2 1486047205463  TITLE-2  7, 5, 6   ABC, XYZ, MNQ 

Ich bin in der Lage, nur eine einzelne Spalt raus von

df.groupby('ID')['TXT'].apply(lambda x:', '.join(x)) 

Aber wie es auf der gesamten df zu tun, damit ich selektiv einige Spalten kommen kann, während nur Wählen Sie die oberen Werte der anderen Spalten innerhalb derselben Gruppen. Im Moment mache ich das, indem ich die Werte als eine Menge aggregiere und dann die Menge für einige Spalten erweitere. Aber das scheint nicht sehr effizient

Antwort

0

Verwenden Sie agg und liefern, welche Funktion Sie für jede Spalte anwenden möchten. Hier gebe ich Ihnen ein gemischtes Beispiel, wo ich nur gegen "ID" gruppiere, um zu illustrieren, wie man das erste Element auf "TITLE" nimmt, aber Sie könnten dagegen für Ihre Probe gruppieren (was nicht der allgemeine Fall ist, den Sie haben:

df.groupby('ID').agg({'TITLE':'first', 
         'TXT_ID':lambda x:', '.join(x), 
         'TXT':lambda x:', '.join(x)}) 
Out[288]: 
     TITLE TXT_ID   TXT 
ID         
2 TITLE-2 7, 5, 6 ABC, XYZ, MNQ 
+0

Ah, hab es, danke – Fizi

Verwandte Themen