マルチインデックスのDataFrameに、複数の列をまとめて追加する方法


列がマルチインデックスなDataFrameへ、  
複数の列を、ループを利用せずに、まとめて追加することできないでしょうか？

参考にしたサイト：<https://www.fixes.pub/program/312227.html>

[code]

    import pandas as pd
    df = pd.DataFrame(
        data=[
            ['a', 10, 'あ', 11],
            ['b', 20, 'い', 21],
            ['c', 30, 'う', 31] ],
        index=['aa', 'bb', 'cc'],
        columns=[['X', 'X', 'Y', 'Y'], ['A', 'B', 'A', 'B']],
    )
    print('◇元データ')
    display(df)
    
    df_expected = pd.DataFrame(
        data=[
            ['a', 10, 1000, 'あ', 11, 1100],
            ['b', 20, 2000, 'い', 21, 2100],
            ['c', 30, 3000, 'う', 31, 3100] ],
        index=['aa', 'bb', 'cc'],
        columns=[['X', 'X', 'X', 'Y', 'Y', 'Y'], ['A', 'B', 'C', 'A', 'B', 'C']],
    )
    print('◇期待する変換結果')
    display(df_expected)
    
    print('↓↓↓[参考]値の変更ならまとめてできる')
    df.loc[:, (slice(None), 'B')] = df.loc[:, (slice(None), 'B')] * 100 # ←値の変更ならまとめてできる。
    display(df)
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/JOeEf.png)](https://i.stack.imgur.com/JOeEf.png)



[code]

    import pandas as pd
    import numpy as np
    
    print(pd.__version__)
    # 1.4.0
    
    df = pd.DataFrame(
        data=[
            ['a', 10, 'あ', 11],
            ['b', 20, 'い', 21],
            ['c', 30, 'う', 31] ],
        index=['aa', 'bb', 'cc'],
        columns=pd.MultiIndex.from_product([['X', 'Y'], ['A', 'B']]),
    )
    
    level = df.columns.get_level_values(0).unique()
    df[[(i, 'C') for i in level]] = np.array([[1000, 2000, 3000], [1100, 2100, 3100]]).T
    df = df[level]
    
    pd.set_option('display.unicode.east_asian_width', True)
    print(df)
    #
        X             Y          
        A   B     C   A   B     C
    aa  a  10  1000  あ  11  1100
    bb  b  20  2000  い  21  2100
    cc  c  30  3000  う  31  3100
    
[/code]



[code]

    import pandas as pd
    import numpy as np
    
    print(pd.__version__)
    # 1.4.0
    
    df = pd.DataFrame(
        data=[
            ['a', 10, 'あ', 11],
            ['b', 20, 'い', 21],
            ['c', 30, 'う', 31] ],
        index=['aa', 'bb', 'cc'],
        columns=pd.MultiIndex.from_product([['X', 'Y'], ['A', 'B']]),
    )
    
    level = df.columns.get_level_values(0).unique()
    df[[(i, 'C') for i in level]] = np.array([[1000, 2000, 3000], [1100, 2100, 3100]]).T
    df = df[level]
    
    pd.set_option('display.unicode.east_asian_width', True)
    print(df)
    #
        X             Y          
        A   B     C   A   B     C
    aa  a  10  1000  あ  11  1100
    bb  b  20  2000  い  21  2100
    cc  c  30  3000  う  31  3100
    
[/code]

