所有日期的Pandas df sum groupby列

时间:2018-06-18 17:27:52

标签: python pandas dataframe

我有以下df qty,其中包含带有数量的重复项目的日期。

DF qty
|    date    | qty  |   item   | ccy |
+------------+------+----------+-----+
| 2015-01-01 |  700 | CB04 box | USD |
| 2015-01-01 |  500 | CB04 box | USD |
| 2015-01-01 | 1500 | AB01 box | USD |
| 2015-01-02 |  550 | CB04 box | USD |
| 2015-01-02 |  750 | AB01 box | USD |
| 2015-01-02 |  500 | AB01 box | USD |
| 2015-01-03 |  100 | AB01 box | USD |
| 2015-01-03 |  200 | AB01 box | USD |
| 2015-01-03 |  300 | AB01 box | USD |

我需要一些建议,如何使DF qty如下:

DF qty
|    date    | qty  |   item   | ccy |
+------------+------+----------+-----+
| 2015-01-01 | 1200 | CB04 box | USD |
| 2015-01-01 | 1500 | AB01 box | USD |
| 2015-01-02 |  550 | CB04 box | USD |
| 2015-01-02 | 1250 | AB01 box | USD |
| 2015-01-03 |  600 | AB01 box | USD |

我正在做的是为每个df制作一个子集date,然后按qty对它们进行分组。

qty = qty[qty[date] == '2015-01-01']

然后

## Sum items lots 
qty = qty.groupby('item').agg({'date': 'first',
                                'ccy':'first',    
                                'qty' : 'sum'}).reset_index()

这个过程非常重复,我想要为所有dates做一些事情,并为item总结qty

1 个答案:

答案 0 :(得分:1)

您可以同时groupby多个列。在这种情况下,您似乎希望在同一天以相同货币查找给定项目的总金额。这意味着您要分组['date', 'item', 'ccy']

df.groupby(['date', 'item', 'ccy']).sum().reset_index()

输出:

         date      item  ccy   qty
0  2015-01-01  AB01_box  USD  1500
1  2015-01-01  CB04_box  USD  1200
2  2015-01-02  AB01_box  USD  1250
3  2015-01-02  CB04_box  USD   550
4  2015-01-03  AB01_box  USD   600