5.42. mrjoin 参照ファイルの範囲条件による結合

範囲により参照データの項目を結合(join)する。 r= パラメータで指定した項目値が、参照データ上にある範囲条件(項目値以上、次行の項目値未満)にマッチすれば f= パラメータで指定した項目値を結合する。 より複雑な範囲条件で結合したければ mnrjoin を使う。 範囲条件数が少なければ mchgnum の利用を考えるとよい。

パラメータ

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

入力データを指定する。

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

出力データを指定する。

f= : 型=str , 任意(default=)

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

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

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

rf= : 型=str , 必須

範囲比較される項目名
入力データ上の項目名を指定する。
ここでここで指定した項目(複数項目指定可)で並べ替えられた後、結合が行われる。
%nが指定されると、数値範囲として解釈し、指定がなければ文字列範囲として解釈する。
ここで指定する項目にNULL値があってはならない。NULL値があった場合の動作は不定である。

R= : 型=str , 任意(default=)

参照データ上の範囲項目名。
省略時は r= パラメータと同名として扱われる。

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

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

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

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

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

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

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

left open interval
R= パラメータで指定した範囲を左半開区間(より大きい~以下)と解釈する。

利用例

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

 1import nysol.mcmd as nm
 2
 3with open('dat1.csv','w') as f:
 4  f.write(
 5'''price
 68
 715
 835
 950
1090
11200
12''')
13
14with open('ref1.csv','w') as f:
15  f.write(
16'''range,category
1710,low
1835,middle
1980,high
20100,
21''')
22
23with open('dat2.csv','w') as f:
24  f.write(
25'''item,price
26A,10
27A,20
28B,10
29B,20
30''')
31
32with open('ref2.csv','w') as f:
33  f.write(
34'''item,price,category
35A,10,low
36A,15,high
37A,100,
38B,10,low
39B,35,high
40B,100,
41''')

基本例

price を範囲で 分類項目 low、middle、high を結合する。

1nm.mrjoin(rf="price%n", m="ref1.csv", R="range", f="category", i="dat1.csv", o="rsl1.csv").run()
2### rsl1.csv の内容
3# price%0n,category
4# 15,low
5# 35,middle
6# 50,middle
7# 90,high

基本例2

1nm.mrjoin(lo=True, rf="price%n", m="ref1.csv", R="range", f="category", i="dat1.csv", o="rsl2.csv").run()
2### rsl2.csv の内容
3# price%0n,category
4# 15,low
5# 35,low
6# 50,middle
7# 90,high

基本例3

1nm.mrjoin(n=True, rf="price%n", m="ref1.csv", R="range", f="category", i="dat1.csv", o="rsl3.csv").run()
2### rsl3.csv の内容
3# price%0n,category
4# 8,
5# 15,low
6# 35,middle
7# 50,middle
8# 90,high
9# 200,

商品別に異なる範囲を設定して結合

1nm.mrjoin(k="item", rf="price%n", m="ref2.csv", f="category", i="dat2.csv", o="rsl4.csv").run()
2### rsl4.csv の内容
3# item%0,price%1n,category
4# A,10,low
5# A,20,high
6# B,10,low
7# B,20,low

関連メソッド