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の操作は基本ですので、慣れておくと便利です。