pandasで、マルチインデックスを持つDataFrame同士を結合したらしようとしたらタイトルのようなエラーが発生した.
pd.concat([df1, df2, ...], axis=1)
エラーの意味は、インデックスに重複があるからconcatを実行できないよという内容だったので、実際に調べたら幾つかのDataFrameのインデックスに重複があることが判明。
indexの重複除去はストレートな関数が用意されていなさそうなので、DataFrameを読み込むときにあらかじめ重複を削除することによって解決。
解決策1
def read_csv_wrap(f):
df = pd.read_csv(f).pipe(
lambda d: d.drop_duplicates(
list(d.columns[:3]), keep='first'
)
).pipe(
lambda d: d.set_index(
list(d.columns[:3])
)
)
return df
ちなみに、DataFrameをindexをkeyにして順番にmergeしていくことによって、重複があってもエラーなく連結することができた
解決策2
df_merged = data_frames[0]
for df in data_frames[1:]:
df_merged = df_merged.merge(df, left_index=True, right_index=True, how='outer')
このばあい、df_merged
は重複したindexを残したままだったので、重複行を残す必要がことさらない場合一つ目の解決法がベター
pandasのマルチインデックスは仕様が謎だし扱いが難しい...