在熊猫市中按日期分组的年和月

时间:2019-03-29 06:48:01

标签: pandas 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 |
+--------------+----------------+

2 个答案:

答案 0 :(得分:1)

使用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]

答案 1 :(得分:0)

如果付款日期列的日期时间类型为,石斑鱼应该可以工作。演示:

t = '''Payment Date | Payable Amount
2016/5/31    |             20
2016/5/28    |             30
2016/5/21    |             40
2017/5/20    |             50
2017/5/15    |             60'''

t = re.sub(r'[ \t]+\|[ \t]+', ',', t)


df = pd.read_csv(io.StringIO(t), parse_dates=['Payment Date'])

print(df)

输出:

  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

然后:

df.groupby(pd.Grouper(key='Payment Date', freq='MS')).sum()

输出:

              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
相关问题