2017-09-03 179 views
0

後,我有以下csv文件:熊貓數據框中添加列GROUPBY

type sku quantity country account 
Order CHG-FOOD1COMP-CA 1 usa hch 
Order CHG-FOOD2COMP-CA 1 usa hch 
Order CHG-FOOD2COMP-CA 1 usa hch 
Order CHG-FOOD1COMP-CA 1 usa hch 
Order CHG-FOODCONT1-CA 1 usa hch 
Order   usa hch 
Order Q7-QDH0-EBB5-CA 1 usa hch 
Order CHG-FRY-12PT5-CA 1 usa hch 
Order Q7-QDH0-EBB5-CA 1 usa hch 
Order Q7-QDH0-EBB5-CA 1 usa hch 
Order CHG-FRY-12PT5-CA 1 usa hch 
Order CB-BB-CLR12-CA 1 usa hch 
Order CB-BB-AMB12-CA 1 usa hch 

Order   usa hch 
Order CB-BB-AMB12-CA 1 usa hch 
Order CHG-FRY-12PT5-CA 1 usa hch 
Order CB-BB-CLR12-CA 1 usa hch 
Order CHG-FRY-12PT5-CA 1 usa hch 
Order CHG-FOODCONT1-CA 1 usa hch 
Refund CHG-FRY-9PT5-CA 1 usa hch 
Order CHG-FOOD1COMP-CA 1 usa hch 

我有以下的數據。我想要得到每個sku的總量。

SQL: Select sku sum(quantity) As TotalQty, country, account 
    From (usa_chc_Date.csv) 
    group by sku,... 

我不介意先取之,然後添加那些總是在同一個國家/帳戶列。 我的目的是將信息存儲在這些csv中,以便它們很容易加載到django中,然後刪除這些文件。 這就是我要找:

sku TotalQty country account 
sku1 7  mx  chc 
sku3 4  mx  chc 
sku4 2  mx  chc 
sku5 1  mx  chc 
sku6 7  mx  chc 
sku7 9  mx  chc 

我也命名的文件,包括國家/帳戶信息。我想我可以使用這個文件,並在保存模型時去掉國家和帳戶。

備註 - 帳戶不會更改,因爲它們位於同一報告中。一旦他們被加載,他們skus可以有重複,但他們有不同的國家。

我嘗試這樣做:

df = df.groupby(['sku','quantity']).sum() 
+0

凡在數據品牌/國家列?目前還不清楚你想要提供的樣本數據。 –

+0

@Andrew我改變了我的問題Acconnt和品牌是一樣的,對不起。我希望它更清楚一點。我正在嘗試每sku總數。所以如果SKU1出現了7個訂單,而其中的2個訂單每個都有2個,其餘的有1個,TotalQty將會是9,並且該行將是:sku |總計|國家|賬戶 –

回答

1

您使用了錯誤的colums pd.groupby

你的問題表明,「國家」和「賬戶」是所有「SKU」一樣。在這種情況下,您應該使用:

df.groupby(['sku', 'country', 'account'], as_index=False).quantity.sum() 
Out []: 
       sku country account quantity 
0 CB-BB-AMB12-CA  usa  hch   2 
1 CB-BB-CLR12-CA  usa  hch   2 
2 CHG-FOOD1COMP-CA  usa  hch   3 
3 CHG-FOOD2COMP-CA  usa  hch   2 
4 CHG-FOODCONT1-CA  usa  hch   2 
5 CHG-FRY-12PT5-CA  usa  hch   4 
6 CHG-FRY-9PT5-CA  usa  hch   1 
7 Q7-QDH0-EBB5-CA  usa  hch   3 

注意:我從您的示例中刪除了沒有「sku」和「數量」的兩行。它應該處理這些情況,只是在評論。

+0

我試過了,它返回所有列,你在哪裏權的建議,我也希望增加頭部後面,因爲它不會在CSV顯示。 –

0
df = df.groupby(['sku','Country','Account'],as_index=True)['actual sales'].sum() 
df = df.reset_index() 
df.rename(columns={0:'count'}, inplace=True) 

我爲我的便利改變了列名,否則不相關的