我创建了如下数据框:
paystart = datetime.date(2017, 10, 26)
paydate = pd.DataFrame()
paydate['PayDate'] = pd.date_range(paystart, end, freq='14D')
print(paydate.Grouper(freq='M'))
我想计算任何月份-年份组合的日期数量实例,即结果应类似于:
2017-10 1
2017-11 2
2017-12 2
答案 0 :(得分:1)
如果将Grouper
与GroupBy.size
结合使用,或者将DataFrame.resample
与Resampler.size
结合使用,则输出为DatetimeIndex
:
paydate = pd.DataFrame()
paydate['PayDate'] = pd.date_range('2017-10-26', '2017-12-26', freq='14D')
print (paydate)
PayDate
0 2017-10-26
1 2017-11-09
2 2017-11-23
3 2017-12-07
4 2017-12-21
print(paydate.groupby(pd.Grouper(freq='M', key='PayDate')).size())
PayDate
2017-10-31 1
2017-11-30 2
2017-12-31 2
Freq: M, dtype: int64
print(paydate.resample('M', on='PayDate').size())
PayDate
2017-10-31 1
2017-11-30 2
2017-12-31 2
Freq: M, dtype: int64
或者可以通过Series.dt.to_period
创建月份期间-输出为PeriodIndex
:
print(paydate.groupby(paydate['PayDate'].dt.to_period('m')).size())
PayDate
2017-10 1
2017-11 2
2017-12 2
Freq: M, dtype: int64