

画像のようにdf1~12 target_list1~12 まで増えるコードがあるのですが  
for文で一つにまとめたいと考えています。

見た目が悪いので何かいい方法はないでしょうか？

[![複数の変数](https://i.stack.imgur.com/pe9Et.png)](https://i.stack.imgur.com/pe9Et.png)


CC BY-SA 4.0
2023-06-15T06:13:56.600
95238
2023-06-15T07:41:27.207
2023-06-15T06:26:29.650
3060
58733
question
python
複数の処理をfor文で一つのコードにまとめる方法はありますか？


[辞書型](https://docs.python.org/ja/3/library/stdtypes.html?highlight=dict#mapping-
types-dict)の利用がスタンダートです。  
そのほかに[リスト型](https://docs.python.org/ja/3/library/stdtypes.html?highlight=list#lists)もよく利用されます。

**辞書型のサンプルコード**

[code]

    dic = {}
    for i in range(1, 13):
        dic[i] = f'ゾーン名 in @target_list{i}'
    
    print(dic[1])   # ゾーン名 in @target_list1
    print(dic[12])  # ゾーン名 in @target_list12
    
[/code]


CC BY-SA 4.0
2023-06-15T06:29:04.087
95239
2023-06-15T06:29:04.087
9820
95238
answer


`df` が Pandas のデータフレームだとすれば、`target_list1` ~ `target_list12` をリストのリストにして list
comprehension で抽出する方法もあるかと思います。(出力はデータフレームのリストになります)

[code]

    import pandas as pd
    
    df = pd.DataFrame({'ゾーン名': ['d', 'i', 'b', 'f', 'a', 'g', 'e', 'c', 'h']})
    
    target_list1 = ['a', 'b', 'c']
    target_list2 = ['d', 'e', 'f']
    target_list3 = ['g', 'h', 'i']
    target_list = [target_list1, target_list2, target_list3]
    
    #
    dfs = [df.query('ゾーン名 in @target').reset_index(drop=True) for target in target_list]
    print(f'dfs[0] =\n{dfs[0]}')
    print(f'dfs[1] =\n{dfs[1]}')
    print(f'dfs[2] =\n{dfs[2]}')
    
    # dfs[0] =
    #    ゾーン名
    # 0        b
    # 1        a
    # 2        c
    # 
    # dfs[1] =
    #    ゾーン名
    # 0        d
    # 1        f
    # 2        e
    # 
    # dfs[2] =
    #    ゾーン名
    # 0        i
    # 1        g
    # 2        h
    
[/code]


CC BY-SA 4.0
2023-06-15T07:41:27.207
95245
2023-06-15T07:41:27.207
47127
95238
answer