Python 列データを行方向へ連結する「Pandas」

 本記事では、pandasを利用して列データを行方向へ連結する雛形コードを載せました。下図左が元データで、列名indexの値0,1,2を各グループとして、列名data1,data2,data3の値を行方向へ結合します。この時、重複する値がある場合はその行を削除して、ソートします。処理後の結果が下図右です。

f:id:HK29:20210304003446p:plain

■本プログラム

import pandas as pd
import numpy as np

def main():
    df = pd.read_csv(input_file)
    print(df)
    df0 = df[~df.duplicated('index')] # 指定した列の重複する行を削除
    print(df0)
    print(df0.shape) # df.shapeで(行数, 列数)を取得
    with open(out_file, 'w') as f:
        f.write('index,data\n')
        for i in range(df0.shape[0]):
            df_list = []
            for j in range(df0.shape[1]-1):
                df_buf = df[(df['index'] == i)] # 指定列で条件に一致した値がある行を抜粋
                df_list.append(df_buf['data' + str(j+1)]) # 指定列を抜粋
            DF = pd.concat(df_list) # 行方向へ連結
            DF2 = DF[~DF.duplicated()] # ダブり行を削除
            DF_s = DF2.sort_values() # 並び替える
            DF_np = DF_s.values # numpyアレイ型へ変換
            print(DF_np)
            for k in DF_np:
                f.write(str(i) + ',' + str(k) + '\n')


if __name__ == '__main__':
    input_file = 'Book1.csv'
    out_file = 'book.csv'

    main()
    print('finished')

以上

<広告>