スポンサーリンク

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

スポンサーリンク