2017-01-13 142 views
3

組CSV我導入CSV像這樣的內容文件:排序,並與大熊貓

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

然後,我有它針對每個PartNrInt附加數據的數據庫。我合併了這兩個數據框,所以我有這樣的東西:

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;  

這部分工作正常,我可以很容易地打印數據幀。爲了在我們的ERP系統中導入文件,我必須將表格編組爲PartNrInt。 所以我想一個表所示:

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

我的問題是,我可以df.groupby('PartNrInt')['Id'].apply(list) GROUPBY數據和統計的對象,但我無法得到新的一幀新的數據導出。 我對熊貓和python是全新的,所以也許有一個非常簡單的解決方案。

+0

如果我可以,我會建議也許以後upvoting對方的回答太:) – IanS

+0

,我不還沒有必要的15個聲望:D –

回答

4

您可以使用groupbyaggregatejoinlen,最後reset_index和重新排序列:

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

哇,這太棒了! 非常感謝! –

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