[Python/pandas]mergeでDataFrameを結合する

mergeで2つのDataFrameを結合できる

複数のDataFrameを、共通の列でまとめることができます。
SQLのJOINに近い使い方ができます。

基本的な使い方

pd.merge([データ1], [データ2], on='{カラム名}',how='{結合方法}')

データ

2つのテーブルがあり、codeが共通のカラムです。
両方にあるcodeと片方にしかないcodeがそれぞれあります。

merge_names.tsv

code    name
A   hoge
B   fuga
C   piyo
D   foo
E   bar

merge_values.tsv

code    value
A   10
B   100
C   200
D   300
G   1000

コード

merge_sample.py

import pandas as pd

names = pd.read_csv('tests/merge_names.tsv',sep='\t')
values = pd.read_csv('tests/merge_values.tsv',sep='\t')

left_join = pd.merge(names, values, on='code', how='left')
print('==========left_join==========')
print(left_join)

right_join = pd.merge(names, values, on='code', how='right')
print('==========right_join==========')
print(right_join)

inner_join = pd.merge(names, values, on='code', how='inner')
print('==========inner_join==========')
print(inner_join)

outer_join = pd.merge(names, values, on='code', how='outer')
print('==========outer_join==========')
print(outer_join)

出力結果

==========left_join==========
  code  name  value
0    A  hoge   10.0
1    B  fuga  100.0
2    C  piyo  200.0
3    D   foo  300.0
4    E   bar    NaN
==========right_join==========
  code  name  value
0    A  hoge     10
1    B  fuga    100
2    C  piyo    200
3    D   foo    300
4    G   NaN   1000
==========inner_join==========
  code  name  value
0    A  hoge     10
1    B  fuga    100
2    C  piyo    200
3    D   foo    300
==========outer_join==========
  code  name   value
0    A  hoge    10.0
1    B  fuga   100.0
2    C  piyo   200.0
3    D   foo   300.0
4    E   bar     NaN
5    G   NaN  1000.0

まとめ

pd.groupby()と組み合わせて、テキストデータをDBに入れたりせずとも簡単な集計はできそうですね。

参考