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

Share on:

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

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

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

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

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

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

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

関数化

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

 1import pandas as pd
 2def insert_columns(df, start, columns):
 3    left = df.iloc[ :, 0:start ]
 4    mid = pd.DataFrame(index=df.index, columns=columns)
 5    right = df.iloc[ :, start:df.shape[1]  ]
 6    return pd.concat([left, mid, right], axis=1)
 7df = pd.DataFrame(
 8    {
 9        'a': ['A1', 'A2', 'A3', 'A4', 'A5', 'A6'],
10        'b': ['B1', 'B2', 'B3', 'B4', 'B5', 'B6'],
11        'c': ['C1', 'C2', 'C3', 'C4', 'C5', 'C6'],
12        'd': ['D1', 'D2', 'D3', 'D4', 'D5', 'D6'],
13        'e': ['E1', 'E2', 'E3', 'E4', 'E5', 'E6'],
14    },
15    index=['one', 'two', 'three', 'four', 'five', 'six']
16)
17print(df)
18inserted = insert_columns(df, 2, ['f', 'g'])
19print(inserted)

実行結果

 1        a   b   c   d   e
 2one    A1  B1  C1  D1  E1
 3two    A2  B2  C2  D2  E2
 4three  A3  B3  C3  D3  E3
 5four   A4  B4  C4  D4  E4
 6five   A5  B5  C5  D5  E5
 7six    A6  B6  C6  D6  E6
 8        a   b    f    g   c   d   e
 9one    A1  B1  NaN  NaN  C1  D1  E1
10two    A2  B2  NaN  NaN  C2  D2  E2
11three  A3  B3  NaN  NaN  C3  D3  E3
12four   A4  B4  NaN  NaN  C4  D4  E4
13five   A5  B5  NaN  NaN  C5  D5  E5
14six    A6  B6  NaN  NaN  C6  D6  E6

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

関連記事