

図のようなデータに対して、IDごとにDataframeを分割（for df_i in
dfs）し、分割したDataframeをそれぞれCSVファイルに出力したい考えております。

しかし、アプトプットのファイルを見ると最後にLoopされたIDした出力されません。  
どのようにすれば、各DataframeをCSVで出力できますでしょうか。

[code]

    # フォルダを指定
    infolder = './'
    outfolder = './'
    
    # ファイル名の組み立て方情報(特定文字列+数字の形式の場合)
    fprefix = 'list'       # ファイル名の頭に付いている文字列
    fsuffixFirst = 1       # ファイル名に付いている最初の数字
    fsuffixMaxPlus1 = 5 # ファイル名に付いている最大の数字に+1したもの
    fsuffixStep  = 1       # ファイル名に付いている数字の増えていく間隔
    
    # データフレームをスライスしたい場合
    k = 3
    n = data.shape[0]
    dfs = [data.loc[i:i+k-1, :] for i in range(0, n, k)]
    
    #CSVファイルへ書き出す
    for fsuffix in range(fsuffixFirst, fsuffixMaxPlus1, fsuffixStep):
        basefname = fprefix + str(fsuffix)         # ファイル名だけ部分の組み立て
        inputfile = infolder + basefname + '.csv'  # パス名作成
        for  df_i in dfs:　#データフレーム分割
            df_i.to_csv(outfolder + basefname + '_0.5h.csv', index=False)
    
[/code]

**各IDの週データ**

[![各IDの週データ](https://i.stack.imgur.com/W5Zni.png)](https://i.stack.imgur.com/W5Zni.png)


CC BY-SA 4.0
2020-10-06T12:01:24.663
70963
2020-10-06T13:10:27.057
2020-10-06T13:00:00.537
3060
42209
question
python csv
分割したDataframeを複数のファイルに分けてCSVで出力したい

[code]

    for index, id in enumerate(data['ID'].unique()):
        tmp_data = data[data['ID'] == id]
        tmp_data.to_csv(outfolder + fprefix + str(index+1) + '_0.5h.csv', index=False)
    
[/code]

こんな感じでいいと思いますけど、どうでしょう？`df.unique()`でIDの一覧を取得して、そのIDの行のみを抽出して（`data[data['ID']
== id]`）、連番をつけてファイルに出力しています。


CC BY-SA 4.0
2020-10-06T12:43:48.283
70964
2020-10-06T12:43:48.283
21092
70963
answer


以下は `pandas.DataFrame.groupby()` を使う方法です。

[code]

    import pandas as pd
    
    data = pd.DataFrame({
      'ID': [10, 10, 10, 20, 20, 20, 30, 30, 30, 40, 40, 40],
      'name': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'D', 'D', 'D'],
      'week': [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3],
      '売上': [100, 200, 300, 50, 60, 70, 1, 2, 3, 500, 600, 700],
    }) 
    
    #フォルダを指定
    outfolder = './'
    
    # ファイル名の組み立て方情報(特定文字列+数字の形式の場合)
    fprefix = 'list'       # ファイル名の頭に付いている文字列
    
    for i, (id, group) in enumerate(data.groupby('ID')):
      group.to_csv(f'{outfolder}{fprefix}{i+1}_0.5h.csv', index=False)
    
[/code]


CC BY-SA 4.0
2020-10-06T13:10:27.057
70965
2020-10-06T13:10:27.057
70963
answer