Python pandasで特定の列に複数列挿入する

pandasで特定の列に複数の列を挿入するプログラムを作成しました。



挿入する列の番号をstartとして、データフレームdfをstartで左右にスライスします。スライス後の左側データフレームleftは0~startまでをスライス、右側データフレームrightはstartからdfの列の最後の番号までスライスします。

left = df.iloc[ :, 0:start ]
right = df.iloc[ :, start:df.shape[1]  ]

挿入するデータフレームは、元のデータフレームdfのインデックスと新たに追加する列の名前のcolumnsを指定してデータフレームmidを新たに作成します。

mid = pd.DataFrame(index=df.index, columns=columns)

そして最後にconcatでleft、mid、rightを横方向(axis=1)に連結したらデータフレームの特定の列に複数の列が挿入されます。

pd.concat([left, mid, right], axis=1)

関数化

これらを関数化(insert_columns)したテスト用のプログラムは下記の通りです。

import pandas as pd

def insert_columns(df, start, columns):
    left = df.iloc[ :, 0:start ]
    mid = pd.DataFrame(index=df.index, columns=columns)
    right = df.iloc[ :, start:df.shape[1]  ]

    return pd.concat([left, mid, right], axis=1)

df = pd.DataFrame(
    {
        'a': ['A1', 'A2', 'A3', 'A4', 'A5', 'A6'],
        'b': ['B1', 'B2', 'B3', 'B4', 'B5', 'B6'],
        'c': ['C1', 'C2', 'C3', 'C4', 'C5', 'C6'],
        'd': ['D1', 'D2', 'D3', 'D4', 'D5', 'D6'],
        'e': ['E1', 'E2', 'E3', 'E4', 'E5', 'E6'],
    },
    index=['one', 'two', 'three', 'four', 'five', 'six']
)

print(df)

inserted = insert_columns(df, 2, ['f', 'g'])

print(inserted)



実行結果

        a   b   c   d   e
one    A1  B1  C1  D1  E1
two    A2  B2  C2  D2  E2
three  A3  B3  C3  D3  E3
four   A4  B4  C4  D4  E4
five   A5  B5  C5  D5  E5
six    A6  B6  C6  D6  E6
        a   b    f    g   c   d   e
one    A1  B1  NaN  NaN  C1  D1  E1
two    A2  B2  NaN  NaN  C2  D2  E2
three  A3  B3  NaN  NaN  C3  D3  E3
four   A4  B4  NaN  NaN  C4  D4  E4
five   A5  B5  NaN  NaN  C5  D5  E5
six    A6  B6  NaN  NaN  C6  D6  E6

列番号2の位置に新たにf、g列を挿入することが出来ました。

コメント

タイトルとURLをコピーしました