我导入一个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)按数据分组并计算对象数,但无法在新的框架中获取新数据以进行导出。
我对熊猫和蟒蛇都是新手,所以也许有一个非常简单的解决方案。

最佳答案

您可以将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

08-24 16:59