使用pandas对csv进行排序和分组

时间:2017-01-13 09:45:11

标签: python pandas

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

2 个答案:

答案 0 :(得分:4)

您可以将groupbyaggregate joinlen一起使用,最后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

答案 1 :(得分: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