簡體   English   中英

使用pandas對csv進行排序和分組

[英]Sort and group csv with 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對表進行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)並計算對象,但我無法在新幀中獲取新數據以進行導出。 我對熊貓和蟒蛇都是新手,所以也許有一個非常簡單的解決方案。

您可以將groupbyaggregate joinlen ,last reset_index和reorder columns一起使用:

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
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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM