2017-09-03 162 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) 

我为我的便利改变了列名,否则不相关的