

プログラミング初心者です。  
読み込んだCSVファイルを購入日で3ヵ月毎に遡り、累計したデータを別々のCSVファイルとして出力したいです。  
イメージとしては、  
ファイル1つ目：2020/01/01 - 2020/04/01  
ファイル2つ目：2020/01/01 - 2020/07/01  
ファイル3つ目：2020/01/01 - 2020/10/01  
など

エラーメッセージは出ないのですが、出力されるファイルがすべて同じ期間のものとなり  
上記のような累計の形式にはなりません。  
修正案をご教示いただけないでしょうか？

[code]

    #結合したcsvファイルを読み込む
    df = pd.read_csv('/content/drive/MyDrive/rfm/*.csv')
    
    #購入日を計算可能なフォーマットを変換
    df['購入日'] = pd.to_datetime(df['購入日'])
    
    #3ヵ月毎でデータを分割し出力
    dt_st = min(df['購入日']).to_pydatetime()
    dt_ed = max(df['購入日']).to_pydatetime()
    
    dt_cur = dt_st
    while dt_cur < dt_ed:
        dt_cur = dt_cur + relativedelta(months=3)
        mask = (df['購入日'] >= dt_st) & (df['購入日'] <= dt_cur)
        grp = df.groupby(mask) 
        for g, df in grp:
            g = dt_cur.strftime('%Y%m%d')
            df.to_csv(f'/content/drive/MyDrive/rfm/rfm_until_{g}.csv', index=False)
    
[/code]


CC BY-SA 4.0
2022-01-12T03:04:25.450
85632
2022-01-12T05:01:50.133
50844
question
python pandas google-colaboratory
読み込んだCSVファイルを購入日で3ヵ月毎に遡り、累計したデータを別々のCSVファイルとして出力したい


[pandas.Grouper — pandas 1.3.5
documentation](https://pandas.pydata.org/pandas-
docs/stable/reference/api/pandas.Grouper.html) を使うと良いかもしれません。

[code]

    import pandas as pd
    import io
    
    csv_data = '''
    購入日,データ
    2020/1/1,a
    2020/2/13,b
    2020/3/26,c
    2020/4/3,d
    2020/5/17,e
    2020/6/20,f
    2020/7/8,g
    2020/8/15,h
    2020/9/22,i
    '''
    
    df = pd.read_csv(io.StringIO(csv_data), parse_dates=['購入日'])
    (
      df.sort_values('購入日')
        .groupby(pd.Grouper(key='購入日', freq='3MS'))
        .apply(lambda x:
          x.to_csv(f'rfm_from_{x["購入日"].min().strftime("%Y%m%d")}_' +
                   f'to_{x["購入日"].max().strftime("%Y%m%d")}.csv',
                   index=False))
    )
    
[/code]

**実行後**

[code]

    $ ls -1 *.csv
    rfm_from_20200101_to_20200326.csv
    rfm_from_20200403_to_20200620.csv
    rfm_from_20200708_to_20200922.csv
    
    $ for f in *.csv;do echo "$f"; cat $f; echo; done
    rfm_from_20200101_to_20200326.csv
    購入日,データ
    2020-01-01,a
    2020-02-13,b
    2020-03-26,c
    
    rfm_from_20200403_to_20200620.csv
    購入日,データ
    2020-04-03,d
    2020-05-17,e
    2020-06-20,f
    
    rfm_from_20200708_to_20200922.csv
    購入日,データ
    2020-07-08,g
    2020-08-15,h
    2020-09-22,i
    
[/code]


CC BY-SA 4.0
2022-01-12T05:01:50.133
85638
2022-01-12T05:01:50.133
47127
85632
answer