2017-01-13 14 views
3

ich importieren Sie eine CSV-Inhalte wie diese Datei:Sortieren und Gruppe csv mit Pandas

Id; PartNrInt; Some; other; stuff; 
R1; 1234-5678; x1; y1; z1; 
R2; 1234-6789; x2; y2; z2; 
R3; 1234-5678; x3; y3; z3; 

Dann habe ich eine Datenbank, die für jede PartNrInt zusätzliche Daten hat. Ich verschmelzen diese beiden Datenrahmen, so habe ich so etwas wie dieses:

Id; PartNrInt; OrderNr; Manufacturer; Some; other; stuff; 
R1; 1234-5678; OrderNr1; Manuf1; x1; y1; z1; 
R2; 1234-6789; OrderNr2: Manuf2; x2; y2; z2; 
R3; 1234-5678; OrderNr1: Manuf1; x3; y3; z3;  

Dieser Teil funktioniert gut, ich kann leicht den Datenrahmen drucken. Zum Importieren der Datei in unser ERP-System muss ich die Tabellen nach PartNrInt gruppieren. Deshalb möchte ich eine Tabelle wie:

Count; Names; PartNrInt; OrderNr; Manufacturer 
2; R1, R3; 1234-5678; OrderNr1; Manuf1 
1; R2; 1234-6789; OrderNr1; Manuf1 

Mein Problem ist, kann ich die Daten mit df.groupby('PartNrInt')['Id'].apply(list) GROUPBY und die Objekte zählen, aber ich bin nicht in der Lage, die neuen Daten in einem neuen Rahmen erhalten für den Export. Ich bin völlig neu in Pandas und Python, also vielleicht gibt es eine wirklich einfache Lösung.

+0

Wenn ich kann, würde ich auch upvoting die andere Antwort empfehlen :) – IanS

+0

Vielleicht später, i don‘ Ich habe noch die nötigen 15 Reputationen: D –

Antwort

4

Sie groupby mit aggregatejoin und len, zuletzt reset_index verwenden und neu anordnen Spalten:

df = df.groupby(['PartNrInt', 'OrderNr','Manufacturer']).Id 
     .agg({"Names": ','.join, 'Count': len}) 
     .reset_index()[['Count','Names','PartNrInt','OrderNr','Manufacturer']] 
print (df) 

    Count Names PartNrInt OrderNr Manufacturer 
0  2 R1,R3 1234-5678 OrderNr1  Manuf1 
1  1  R2 1234-6789 OrderNr2  Manuf2 
+0

Wow, das ist einfach großartig! Vielen Dank! –

3
g = df.groupby('PartNrInt') 
g[['Manufacturer', 'OrderNr']].first() \ 
    .join(g.Id.agg({'Names': ', '.join, 'Count': 'count'})) \ 
    .reset_index() 

    PartNrInt Manufacturer OrderNr Names Count 
0 1234-5678  Manuf1 OrderNr1 R1, R3  2 
1 1234-6789  Manuf2 OrderNr2  R2  1