2017-01-13 206 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