这是我的数据帧
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进行分组
例如,如果我以每月为频率的账单日期分组,那么我的结果应该有‘食品’的月份‘五月’和‘六月’,他们的总销售额总和。
我设法写了一些代码,如下所示:
basic_df = basic_df.groupby(['S2PName-Category','S2BillDate'], sort=False)['S2PGTotal'].agg([('totSale','sum')]).reset_index()
预期的DF输出:
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。我如何才能做到这一点?
发布于 2020-04-08 00:20:29
你可以这样做:
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
我相信这就是你想要的。
发布于 2020-04-08 01:18:49
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将帮助讨论与频率相关的问题!
https://stackoverflow.com/questions/61084508
复制相似问题