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 intervalR=
パラメータで指定した範囲を左半開区間(より大きい~以下)と解釈する。
共通パラメータ¶
i= , o= , assert_diffSize= , assert_nullkey= , assert_nullin= , assert_nullout= , nfn= , nfno= , x= , q= , tmppath= , precision=
利用例¶
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
関連メソッド¶
mchgnum 数値範囲による置換 : 数値範囲を指定して値を置換/追加する。
mjoin 参照ファイルの項目結合 : 数値範囲ではなく文字列一致による結合の場合はこのコマンドを使う。
mnrcommon 参照ファイルの複数範囲条件による行撰択 : 結合ではなく選択する場合はこのコマンドを使う。