【发布时间】:2019-12-09 16:29:28
【问题描述】:
我有一个包含学生姓名、交易日期和金额的数据集。 每个学生都进行了多次交易。
我想根据每个学生的总金额计算当月排名和上个月排名。
我可以按学生姓名分组以计算每个学生的总金额:
transactions['Totals'] = transactions.groupby('Student Name')['Sale Amount'].transform('sum')
如何扩展它以创建两个不同的列来计算每个学生的上个月总计和当前月份总计,以便我可以为他们分配上个月和当前月份的排名?
日期格式如下:
09/05/2015 04:18 PM
07/15/2019 09:50 AM
05/18/2018 02:34 PM
08/11/2018 06:29 PM
06/14/2018 07:42 AM
编辑:添加数据框以供参考:
Out[15]:
Date of Transaction Student Name Sale Amount
0 09/05/2015 04:18 PM Dan Kelly 4333
1 07/15/2019 09:50 AM Peter Dyer 8805
2 05/18/2018 02:34 PM Natalie Robertson 5640
3 08/11/2018 06:29 PM Sean Miller 6485
4 06/14/2018 07:42 AM Thomas Forsyth 6815
... ... ...
9977 03/15/2018 09:28 PM Grace Vance 6379
9978 08/07/2019 11:14 PM Alexandra Cameron 6688
9979 01/09/2015 10:53 AM Sebastian Vaughan 2262
9980 05/19/2019 10:00 PM Caroline Blake 6977
9981 01/11/2016 04:05 AM Austin Edmunds 3205
[9982 rows x 3 columns]
编辑:添加示例预期输出:
【问题讨论】:
-
您能提供更准确的数据集吗?与您的预期输出?
-
@Datanovice - 只有三列是我已经提到的。学生姓名、销售额和交易日期。我添加了 DataFrame 以供参考。我的预期输出是两个新列:上个月排名和当前月份排名。
-
pd.crosstab( df["Student Name"], df["Date"].dt.strftime("%b"), df["Sale Amount"], aggfunc="sum").fillna(0).reset_index()这应该可以工作。 -
这给了我一个包含离散月份的交叉表。我想我需要连续几个月来选择当前和上个月的数据来计算排名。
-
你能提供你想要的输出吗?如果是这样,提供解决方案会容易得多。
标签: python pandas pandas-groupby