微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 在2个ID上对Pandas中的重复项进行分组,并以不同方式转换其余列

为了这个问题,让我们假设我们在Pandas有2个商店和库存,有重复的条目.我们在条形码上标明每个项目以及它到达商店的日期(因此,如果日期不同,我们会考虑不同的项目,即使条形码相同),我们也会在每个商店中存储每个商品的库存,和价格:

      arrival_date   bar_code   stock_shop1   stock_shop2   price
1       2015-08-30    8000001            52            11     100
2       2015-08-30    8000001            48             0      85
3       2015-09-11    8000001            10            20      95
4       2015-10-04    8000002             5            10      50
5       2015-10-04    8000002            30            25      49

我们想按到货日期和条形码分组,并且:

>总结每家商店的库存
>设置最低价格(我们在销售,我们希望在两个商店提供相同的报价)

所以我们应该得到:

      arrival_date   bar_code   stock_shop1   stock_shop2   price
1       2015-08-30    8000001           100            11      85
2       2015-09-11    8000001            10            20      95
3       2015-10-04    8000002            35            35      49

我已经看到了几个类似的问题,即使有两个id,但我还没有找到是否可以对某些列求和并在其他列中保持最大值或最小值.我想这是可能的,我只是不知道如何.

我试过了:

df.join(df.groupby(['arrival_date', 'bar_code'])(['stock_shop1', 'stock_shop2']).sum(), on=['arrival_date', 'bar_code'], rsuffix='_r')

只是为了检查我是否至少可以通过’arrival_date’和’bar_code’进行分组并对库存列进行求和,但是我得到错误

TypeError: 'DataFrameGroupBy' obejct is not callable

有帮助吗?

解决方法:

是的,你可以这样做,在agg中你可以提到在每列上应用哪个聚合规则.

In [121]: (df.groupby(['arrival_date', 'bar_code'])
             .agg({'stock_shop1': np.sum, 'stock_shop2': np.sum, 'price': np.min})
           )
Out[121]:
                       price  stock_shop1  stock_shop2
arrival_date bar_code
2015-08-30   8000001      85          100           11
2015-09-11   8000001      95           10           20
2015-10-04   8000002      49           35           35

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐