5.35. mnrjoin 参照ファイルの複数範囲条件による自然結合

範囲により参照データの項目を結合(join)する。 r= パラメータで指定した項目値が、 m= パラメータで指定した参照データの R= パラメータで指定した2項目の値の範囲条件(項目1以上項目2未満)に マッチすれば f= パラメータの項目を結合する。 マッチする行が複数あれば、それらの行全てが出力され、ちょうど自然結合のような動きをする。 範囲比較される値は、デフォルトで文字列と見なされる。 数値として処理したい場合は r= パラメータの項目名のあとに%nをつける。

パラメータ

i= : 型=str , 任意(default=標準入力)

入力データを指定する。

o= : 型=str , 任意(default=標準出力)

出力データを指定する。

f= : 型=str , 任意(default=全項目)

結合する参照データ上の項目名リスト(複数項目指定可)を指定する。
省略するとK=で指定された項目以外の項目を全て結合する。

m= : 型=str , 任意(default=標準入力)

参照データを指定する。
このパラメータが省略された時には標準入力が用いられる。( i= 指定ありの場合)

R= : 型=str , 必須

範囲項目名リスト(二項目限定)
参照データ上の範囲項目名(start,end)を指定する。
第一項目のNULL値は無限小,第二項目のNULL値は無限大として扱われる。

rf= : 型=str , 必須

範囲比較される項目名[%{n}]
入力データ上の項目名を指定する。
数値として処理したい場合は rf= パラメータの項目名のあとに%nをつける。

k= : 型=str , 任意(default=キーブレイク処理しない)

入力データ上の突き合わせる項目名リスト(複数項目指定可)
ここで指定した入力データの項目と K= パラメータで指定された参照データの項目が同じ行の項目結合が行われる。

K= : 型=str , 任意(default=k=と同一項目名)

参照データ上の突き合わせる項目名リスト(複数項目指定可)
ここで指定した参照データの項目と k= パラメータで指定された入力データの項目が同じ行の項目結合が行われる。
参照データ上に k= パラメータで指定した入力データ上の項目と同名の項目が存在する場合は指定する必要はない。

n= : 型=bool , 任意(default=False)

参照データにない入力データをNULL値として出力するフラグ。

N= : 型=bool , 任意(default=False)

入力データにない参照データをNULL値として出力するフラグ。

利用例

importと入力データ(CSV)の準備

 1import nysol.mcmd as nm
 2
 3with open('dat1.csv','w') as f:
 4  f.write(
 5'''date,price
 620080123,10
 720080123,20
 820080203,10
 920080203,35
10200804l0,50
11''')
12
13with open('ref1.csv','w') as f:
14  f.write(
15'''date,priceF,priceT,avg
1620080203,5,15,150
1720080203,40,50,200
18''')

基本例

日付項目の値が 20080203 で、 amount 項目の値が 5 以上 15 未満の入力データ行には avg=150 を、 40 以上 50 未満の行には avg=200 を結合する。

1nm.mnrjoin(k="date", f="avg", m="ref1.csv", R="priceF,priceT", rf="price%n", i="dat1.csv", o="rsl1.csv").run()
2### rsl1.csv の内容
3# date%0,price,avg
4# 20080203,10,150

未結合データ出力

n=True を指定することで、参照ファイルにマッチしない入力ファイルの行( avg= がNULL値の行)も出力し、 N=True を指定することで、入力ファイルにマッチしない参照ファイルの行( price= がNULL値の行)も出力する。 いわゆる外部結合である。

1nm.mnrjoin(k="date", f="avg", m="ref1.csv", R="priceF,priceT", rf="price%n", n=True, N=True, i="dat1.csv", o="rsl2.csv").run()
2### rsl2.csv の内容
3# date%0,price,avg
4# 20080123,10,
5# 20080123,20,
6# 20080203,10,150
7# 20080203,35,
8# 20080203,,200
9# 200804l0,50,

関連メソッド