Pandasで2つのDataFrameをindexをキーにマージ
pd.merge()で2つのDataFrameをマージできます。
indexをキーににするには、left_indexもしくはright_indexをTrueに設定します。
両方のindexをキーにするには両方TrueにすればOKです。
print(pd.merge(data01, data02, left_index=True, right_index=True))
ただ、デフォルトでは、how='inner'となっていて、
2つのDataFrameのORでマージしたい場合には、
how='outer'とします。
print(pd.merge(data01, data02, how='outer', left_index=True, right_index=True))
下記のように、片方で欠けている箇所はNaNとなります。
2016-06-01 10.0 1.0 2016-06-02 20.0 2.0 2016-06-03 NaN 3.0 2016-06-04 30.0 NaN 2016-06-05 40.0 NaN 2016-06-06 NaN 4.0
サンプルコード
例えば、下記のcsvファイルがあったとします。
$ cat csv01.txt 20160601,10 20160602,20 20160604,30 20160605,40
$ cat csv02.txt 20160601,1 20160602,2 20160603,3 20160606,4
下記がサンプルコードになります。
$ cat sample.py
#!/usr/bin/env python3
# coding: UTF-8
import pandas as pd
data01 = pd.read_csv('csv01.txt',
names=('date', 'val1'),
index_col='date',
parse_dates=True)
data02 = pd.read_csv('csv02.txt',
names=('date', 'val2'),
index_col='date',
parse_dates=True)
print(data01)
print(data02)
print(pd.merge(data01, data02, left_index=True, right_index=True))
print(pd.merge(data01, data02, how='outer', left_index=True, right_index=True))
下記が実行結果になります。
$ ./sample.py
val1
date
2016-06-01 10
2016-06-02 20
2016-06-04 30
2016-06-05 40
val2
date
2016-06-01 1
2016-06-02 2
2016-06-03 3
2016-06-06 4
val1 val2
date
2016-06-01 10 1
2016-06-02 20 2
val1 val2
date
2016-06-01 10.0 1.0
2016-06-02 20.0 2.0
2016-06-03 NaN 3.0
2016-06-04 30.0 NaN
2016-06-05 40.0 NaN
2016-06-06 NaN 4.0
