Pandas DataFrame在groupby之后添加列

时间:2017-09-03 10:18:56

标签: python pandas dataframe group-by

我有以下csv文件:

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()

2 个答案:

答案 0 :(得分:1)

您在错误的列上使用pd.groupby

你的问题表明" country"和"帐户"所有" 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"也不是"数量"。这些案件应该处理,只是说是评论。

答案 1 :(得分:0)

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

为方便起见,我更改了列名,否则无关