PandasのDataFrame、Seriesで利用されるIndexオブジェクトはIndex同士でラベルを合体させることができます。

PandasのIndexの基礎と使い方については以下の記事で解説しています。

PandasのIndexの理解と使い方まとめ /features/pandas-index.html

Index同士でマージしてソートするだけのシンプルな関数ですが、知っておくと便利です。

本記事では、union関数について使い方を解説します。

Indexのラベル合体

Indexを合体したいときにはunion関数を使うと便利です。union関数は、単にIndex同士のラベルをマージしてソートするだけです。

union関数

union関数のAPIドキュメントは以下のとおりです。

pandas.Index.union(other)

params:

パラメータ名 概要
other Indexオブジェクト
または配列
結合するIndexを指定します。

returns:

結合されたIndexオブジェクトを返します。

要素に被りが有る場合は1回しかそのラベルは出てきません。

非常にシンプルですので簡単に使い方を覚えられると思います。

In [1]: import pandas as pd

In [2]: import numpy as np

In [4]: a = pd.DataFrame(np.arange(25).reshape(5,5), columns=['a','b','c','f','g'])

In [5]: a
Out[5]:
    a   b   c   f   g
0   0   1   2   3   4
1   5   6   7   8   9
2  10  11  12  13  14
3  15  16  17  18  19
4  20  21  22  23  24

In [6]: a.index.union([-1, -2, 3, 8])
Out[6]: Int64Index([-2, -1, 0, 1, 2, 3, 4, 8], dtype='int64')

In [9]: a.index.union(["a","b"])
Out[9]: Index([0, 1, 2, 3, 4, 'a', 'b'], dtype='object')

数字が昇順にソートされて、最初のunion関数の例では重複している3は一つしかunion後に現れません。

これをreindex関数でDataFrameに反映させてみます。

In [12]: a.reindex(a.index.union([4,5,6,7]))
Out[12]:
      a     b     c     f     g
0   0.0   1.0   2.0   3.0   4.0
1   5.0   6.0   7.0   8.0   9.0
2  10.0  11.0  12.0  13.0  14.0
3  15.0  16.0  17.0  18.0  19.0
4  20.0  21.0  22.0  23.0  24.0
5   NaN   NaN   NaN   NaN   NaN
6   NaN   NaN   NaN   NaN   NaN
7   NaN   NaN   NaN   NaN   NaN

直接index属性に代入することはできないので注意してください。

In [13]: a.index = a.index.union([4,5,6,7])
---------------------------------------------------------------------------
(エラーメッセージが表示される)
ValueError: Length mismatch: Expected axis has 5 elements, new values have 8 elements

まとめ

今回はPandasにおけるIndexの合体をするunion関数について解説しました。

PandasのIndexの操作は基本ですので、慣れておくと便利です。

参考