我导入的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)
分组并计算对象,但我无法在新框架中获取新数据以进行导出。
我对熊猫和蟒蛇都是新手,所以也许有一个非常简单的解决方案。
答案 0 :(得分:4)
您可以将groupby
与aggregate
join
和len
一起使用,最后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