[英]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)
並計算對象,但我無法在新幀中獲取新數據以進行導出。 我對熊貓和蟒蛇都是新手,所以也許有一個非常簡單的解決方案。
您可以將groupby
與aggregate
join
和len
,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.