Pandas 大熊猫的日期时间按年份和月份分组

Pandas 大熊猫的日期时间按年份和月份分组,pandas,datetime,Pandas,Datetime,我正在从datetime列导出月份 我的数据如下: +--------------+----------------+ | Payment Date | Payable Amount | +--------------+----------------+ | 2016/5/31 | 20 | | 2016/5/28 | 50 | | 2016/5/21 | 70 | | 2016/5/20 |

我正在从datetime列导出月份

我的数据如下:

+--------------+----------------+
| Payment Date | Payable Amount |
+--------------+----------------+
| 2016/5/31    |             20 |
| 2016/5/28    |             50 |
| 2016/5/21    |             70 |
| 2016/5/20    |             10|
| 2016/5/15    |             150|
+--------------+----------------+
我已尝试使用以下代码:

data.groupby([data['Payment Date'].dt.year,data['Payment Date'].dt.month])['Payable Amount'].sum()
其输出如下列所示:

数量

请注意,我曾尝试使用pd.Grouper('M),它抛出一个错误,认为该错误仅对DatetimeIndex、TimedeltaIndex或PeriodIndex有效,但得到了一个“Float64Index”实例

我期待这样的结果

+--------------+----------------+
| Payment Date | Payable Amount |
+--------------+----------------+
| 2016/5/1    |             300 |
| 2016/6/1    |             400 |
| 2016/7/1    |             500 |
| 2016/8/1    |             550 |
| 2016/9/1    |             600 |
+--------------+----------------+

使用
groupby
,将“付款日期”限定在月初:

(data.groupby(df['Payment Date'] - pd.offsets.MonthBegin(1))['Payable Amount']
     .sum()
     .reset_index())

  Payment Date  Payable Amount
0   2016-05-01             300
使用偏移对象进行减法是为了得到该月的开始日期:

df['Payment Date'] - pd.offsets.MonthBegin(1)

0   2016-05-01
1   2016-05-01
2   2016-05-01
3   2016-05-01
4   2016-05-01
Name: Payment Date, dtype: datetime64[ns]
如果付款日期列具有datetime类型,Grouper应该可以工作。演示:

产出:

  Payment Date  Payable Amount
0   2016-05-31              20
1   2016-05-28              30
2   2016-05-21              40
3   2017-05-20              50
4   2017-05-15              60
              Payable Amount
Payment Date                
2016-05-01                90
2016-06-01                 0
2016-07-01                 0
2016-08-01                 0
2016-09-01                 0
2016-10-01                 0
2016-11-01                 0
2016-12-01                 0
2017-01-01                 0
2017-02-01                 0
2017-03-01                 0
2017-04-01                 0
2017-05-01               110
然后:

产出:

  Payment Date  Payable Amount
0   2016-05-31              20
1   2016-05-28              30
2   2016-05-21              40
3   2017-05-20              50
4   2017-05-15              60
              Payable Amount
Payment Date                
2016-05-01                90
2016-06-01                 0
2016-07-01                 0
2016-08-01                 0
2016-09-01                 0
2016-10-01                 0
2016-11-01                 0
2016-12-01                 0
2017-01-01                 0
2017-02-01                 0
2017-03-01                 0
2017-04-01                 0
2017-05-01               110

请将所需输出修改为与数据更一致。我已编辑了所需输出。谢谢,它能工作。“你能解释一下你为什么要减法吗,而我却不理解代码……”克里希纳31编辑了一段解释。