【问题标题】:Sort and group csv with pandas使用 pandas 对 csv 进行排序和分组
【发布时间】:2017-01-13 18:01:55
【问题描述】:

我导入一个内容如下的 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) 对数据进行分组并对对象进行计数,但我无法在新框架中获取新数据以进行导出。 我对 pandas 和 python 完全陌生,所以也许有一个非常简单的解决方案。

【问题讨论】:

  • 如果可以的话,我建议也支持其他答案:)
  • 也许以后,我还没有必要的 15 个声誉:D

标签: python pandas


【解决方案1】:

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

【讨论】:

  • 哇,这简直太棒了!非常感谢!
【解决方案2】:
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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    • 2021-04-13
    • 2016-05-01
    • 1970-01-01
    相关资源
    最近更新 更多