

以下のような日付データがあります。

[code]

    DatetimeIndex(['2019-06-05', '2019-06-14', '2019-06-24', '2019-07-03',
                   '2019-07-30', '2019-07-31', '2019-08-06', '2019-08-28',
                   '2019-09-03', '2019-09-26', '2019-10-11', '2019-10-18',
                   '2019-10-24', '2019-11-19', '2019-11-20', '2019-12-17',
                   '2019-12-19', '2019-12-20', '2020-01-15', '2020-01-28',
                   '2020-02-17', '2020-02-21', '2020-03-03', '2020-03-17',
                   '2020-03-31', '2020-04-06', '2020-04-24', '2020-05-11',
                   '2020-06-18', '2020-06-26', '2020-07-27', '2020-08-28',
                   '2020-08-31'],
                  dtype='datetime64[ns]', freq=None)
    
[/code]

ここからある月の出現頻度を取得するにはどうすれば良いのでしょう。  
例えば、2020年4月であれば2回、2019年7月であれば3回となります。  
目的の年月を入力すれば、出現回数が返される関数をイメージしていますが、方針が立ちません。

よろしくお願いします。

★追記★  
すみませんが、もう１点教えていただきたいです。  
過去３０日の出現頻度を取得するにはどうすればいいのでしょう。  
例えば、Today='2020-08-31'とした場合2回となります。  
日付を入力すればその日から数えて過去３０日分の出現回数が返される関数をイメージしています。  
お願いします。


CC BY-SA 4.0
2020-10-13T13:39:55.180
71169
2020-10-14T13:44:14.197
2020-10-14T13:44:14.197
21301
21301
question
python pandas
pythonで日付リストから、ある月の出現頻度を取得する方法


こんな感じでどうですかね？

[code]

    days = pd.to_datetime(['2019-06-05', '2019-06-14', '2019-06-24', '2019-07-03',
                   '2019-07-30', '2019-07-31', '2019-08-06', '2019-08-28',
                   '2019-09-03', '2019-09-26', '2019-10-11', '2019-10-18',
                   '2019-10-24', '2019-11-19', '2019-11-20', '2019-12-17',
                   '2019-12-19', '2019-12-20', '2020-01-15', '2020-01-28',
                   '2020-02-17', '2020-02-21', '2020-03-03', '2020-03-17',
                   '2020-03-31', '2020-04-06', '2020-04-24', '2020-05-11',
                   '2020-06-18', '2020-06-26', '2020-07-27', '2020-08-28',
                   '2020-08-31'])
    
    def getDays(month):
        return pd.Series(index=days).to_period("M").index.value_counts().get(month, 0)
    
    print(getDays('2020-04'))
    print(getDays('2019-07'))
    
[/code]


CC BY-SA 4.0
2020-10-13T14:06:29.977
71171
2020-10-13T15:43:07.440
2020-10-13T15:43:07.440
21092
21092
71169
answer


以下は [pandas.DataFrame.resample](https://pandas.pydata.org/pandas-
docs/stable/reference/api/pandas.DataFrame.resample.html) を使う方法です。

[code]

    import pandas as pd
    
    def get_freqency_by_month(date_series, month):
      sampling = date_series.to_frame().resample('M').size()
      return sampling[month][0] if month in sampling else 0
    
    if __name__ == '__main__':
      dates = pd.DatetimeIndex(
        ['2019-06-05', '2019-06-14', '2019-06-24', '2019-07-03',
         '2019-07-30', '2019-07-31', '2019-08-06', '2019-08-28',
         '2019-09-03', '2019-09-26', '2019-10-11', '2019-10-18',
         '2019-10-24', '2019-11-19', '2019-11-20', '2019-12-17',
         '2019-12-19', '2019-12-20', '2020-01-15', '2020-01-28',
         '2020-02-17', '2020-02-21', '2020-03-03', '2020-03-17',
         '2020-03-31', '2020-04-06', '2020-04-24', '2020-05-11',
         '2020-06-18', '2020-06-26', '2020-07-27', '2020-08-28',
         '2020-08-31'], dtype='datetime64[ns]', freq=None)
    
      print(get_freqency_by_month(dates, '2020-04'))
      print(get_freqency_by_month(dates, '2019-07'))
      print(get_freqency_by_month(dates, '2020-10'))
    
    =>
    2
    3
    0
    
[/code]


CC BY-SA 4.0
2020-10-13T14:38:34.510
71172
2020-10-13T14:38:34.510
71169
answer