次のデータがあります。
Invoice NoStockCode Description Quantity CustomerID Country
536365 85123A WHITE HANGING HEART T-LIGHT HOLDER 6 17850 United Kingdom
536365 71053 WHITE METAL LANTERN 6 17850 United Kingdom
536365 84406B CREAM CUPID HEARTS COAT HANGER 8 17850 United Kingdom
Groupbyを実行しようとしているので、次の操作ができます。
df.groupby(['InvoiceNo','CustomerID','Country'])['NoStockCode','Description','Quantity'].apply(list)
出力を取得したい
|Invoice |CustomerID |Country |NoStockCode |Description |Quantity
|536365| |17850 |United Kingdom |85123A, 71053, 84406B |WHITE HANGING HEART T-LIGHT HOLDER, WHITE METAL LANTERN, CREAM CUPID HEARTS COAT HANGER |6, 6, 8
代わりに私は得る:
|Invoice |CustomerID |Country |0
|536365| |17850 |United Kingdom |['NoStockCode','Description','Quantity']
Aggやその他の方法を試しましたが、すべての列をリストとして結合することができませんでした。リスト関数を使用する必要はありませんが、最終的には異なる列をリストにする必要があります。
現在、コードを再現できませんが、次のように思います。
print (df.groupby(['InvoiceNo','CustomerID','Country'],
as_index=False)['NoStockCode','Description','Quantity']
.agg(lambda x: list(x)))
期待される出力が得られます
IIUC
df.groupby(['Invoice','CustomerID'],as_index=False)['Description','NoStockCode'].agg(','.join)
Out[47]:
Invoice CustomerID Description \
0 536365 17850 WHITEHANGINGHEARTT-LIGHTHOLDER,WHITEMETALANTER...
NoStockCode
0 85123A,71053,84406B
次のバリエーションを使用してみてください。
df.groupby('company').product.agg([('count', 'count'), ('NoStockCode', ', '.join), ('Descrption', ', '.join), ('Quantity', ', '.join)])