首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在pandas中结合使用pd.grouper和groupby

如何在pandas中结合使用pd.grouper和groupby
EN

Stack Overflow用户
提问于 2020-04-08 00:13:36
回答 2查看 32关注 0票数 0

这是我的数据帧

代码语言:javascript
运行
复制
    S2PName-Category    S2BillDate  totSale
0   Food               2019-05-18   2150.0
1   Beverages          2019-05-19   403.0
2   Food               2019-05-19   7254.0
3   Others             2019-05-19   200.0
4   Juice              2019-05-19   125.0
5   Snacks             2019-05-19   70.0
6   Food               2019-06-21   11932.0

我想按s2PName-category进行分组,并按频率(每月、每周或每天)和agg totsale对s2Billdate进行分组

例如,如果我以每月为频率的账单日期分组,那么我的结果应该有‘食品’的月份‘五月’和‘六月’,他们的总销售额总和。

我设法写了一些代码,如下所示:

代码语言:javascript
运行
复制
basic_df = basic_df.groupby(['S2PName-Category','S2BillDate'], sort=False)['S2PGTotal'].agg([('totSale','sum')]).reset_index()

预期的DF输出:

代码语言:javascript
运行
复制
  S2PName-Category    S2BillDate  totSale
0   Food               2019-05-31   9404.0
1   Beverages          2019-05-31   403.0
3   Others             2019-05-31   200.0
4   Juice              2019-05-31   125.0
5   Snacks             2019-05-31   70.0
6   Food               2019-06-30   11932.0

在我预期的o/p df中,我将s2Billdate设置为该月的最后一天,并将该月的totSale设置为agg。我如何才能做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2020-04-08 00:20:29

你可以这样做:

代码语言:javascript
运行
复制
In [706]: df                                                                                                                                                                                                
Out[706]: 
    Category    BillDate  totSale
0       Food  2019-05-18   2150.0
1  Beverages  2019-05-19    403.0
2       Food  2019-05-19   7254.0
3     Others  2019-05-19    200.0
4      Juice  2019-05-19    125.0
5     Snacks  2019-05-19     70.0
6       Food  2019-06-21  11932.0

In [710]: df.groupby([df['BillDate'].dt.strftime('%B'), 'Category'])['totSale'].sum()                                                                                                                       
Out[710]: 
BillDate  Category 
June      Food         11932.0
May       Beverages      403.0
          Food          9404.0
          Juice          125.0
          Others         200.0
          Snacks          70.0
Name: totSale, dtype: float64

我相信这就是你想要的。

票数 0
EN

Stack Overflow用户

发布于 2020-04-08 01:18:49

代码语言:javascript
运行
复制
basic_df_2 = basic_df.groupby(['S2PName-Category',basic_df['S2BillDate'].dt.to_period('M')], sort=False)['S2PGTotal'].agg([('totSale','sum')]).reset_index()

dt.to_period将帮助讨论与频率相关的问题!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61084508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档