Pands𞓜19合併/接続

34559 ワード

Pandsは機能が全面的な高性能メモリに接続して操作します。SQLなどの関係データベースと非常に似ています。Pandsは、DATAFrameオブジェクト間のすべての標準データベース接続動作の入口として、単独のmerge()関数を提供する。
 
 
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True)
  • left-DataFrameオブジェクトです。
  • right-もう一つのData Frameオブジェクト。
  • on-列(名前)は、左と右のDataFrameオブジェクト中に存在しなければなりません。
  • left_オン−左のDataFrame内の列はキーとして使用され、列名または長さがDataFrame長に等しい配列とすることができる。
  • right_on-右からのDataFrameの列をキーとして、列名または長さがData Frameの長さに等しい配列とすることができます。
  • left_index-Trueであれば、左のDataFrameのインデックス(行ラベル)をその接続キーとして使用する。MultiIndex(階層)を有するDataFrameの場合、レベルの数は右DataFrameからの接続キーの数と一致しなければならない。
  • right_index-と右DataFrameのleft_indexは同じ用法を持っている。
  • how-left、right、outerおよびinnerのうちの一つです。デフォルトはインナーです。それぞれの方法の使い方を紹介します。
  • sort-結果DataFrameを辞書順に接続キーで並べ替えます。デフォルトはTrueで、Falseに設定されると、多くの場合、性能が大幅に向上する。
  • 現在は2つの異なるDataFrameを作成し、それらを統合します。
    import pandas as pd
    left
    = pd.DataFrame({ 'id':[1,2,3,4,5], 'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub1','sub2','sub4','sub6','sub5']})
    right
    = pd.DataFrame( {'id':[1,2,3,4,5], 'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub2','sub4','sub3','sub6','sub5']}) print (left) print("========================================") print (right)
    出力結果:
         Name  id subject_id
    0    Alex   1       sub1
    1     Amy   2       sub2
    2   Allen   3       sub4
    3   Alice   4       sub6
    4  Ayoung   5       sub5
    ========================================
        Name  id subject_id
    0  Billy   1       sub2
    1  Brian   2       sub4
    2   Bran   3       sub3
    3  Bryce   4       sub6
    4  Betty   5       sub5
    
     
    一つのキーで二つのデータフレームを結合する。
    import pandas as pd
    
    left = pd.DataFrame({
             'id':[1,2,3,4,5],
             'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
             'subject_id':['sub1','sub2','sub4','sub6','sub5']})
    
    right = pd.DataFrame(
             {'id':[1,2,3,4,5],
             'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
             'subject_id':['sub2','sub4','sub3','sub6','sub5']})
    
    rs = pd.merge(left,right,on='id')
    print(rs)
    出力結果:
       Name_x  id subject_id_x Name_y subject_id_y
    0    Alex   1         sub1  Billy         sub2
    1     Amy   2         sub2  Brian         sub4
    2   Allen   3         sub4   Bran         sub3
    3   Alice   4         sub6  Bryce         sub6
    4  Ayoung   5         sub5  Betty         sub5
    
     
    複数のキーの2つのデータボックスを結合します。
    import pandas as pd
    
    left = pd.DataFrame({
             'id':[1,2,3,4,5],
             'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
             'subject_id':['sub1','sub2','sub4','sub6','sub5']})
    
    right = pd.DataFrame(
             {'id':[1,2,3,4,5],
             'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
             'subject_id':['sub2','sub4','sub3','sub6','sub5']})
    
    rs = pd.merge(left,right,on=['id','subject_id'])
    print(rs)
    出力結果:
       Name_x  id subject_id Name_y
    0   Alice   4       sub6  Bryce
    1  Ayoung   5       sub5  Betty
    
     
    「how」を使うパラメータを統合します。
    どのように結合パラメータを指定しますか?どのキーが結果表に含まれますか?結合キーが左または右のテーブルに現れない場合、接続テーブルの値はNAとなる。
    ここではhowオプションとSQL等価名のまとめです。
    統合の方法
    SQL等価
    説明leftLEFT OUTER JOIN左のオブジェクトのキーを使うrightRIGHT OUTER JOIN右のオブジェクトのキーを使うouterFULL OUTER JOINキーの結合を使うinnerINNER JOINキーの交点を使う
    Left Joinの例
    import pandas as pd
    left = pd.DataFrame({
             'id':[1,2,3,4,5],
             'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
             'subject_id':['sub1','sub2','sub4','sub6','sub5']})
    
    right = pd.DataFrame(
             {'id':[1,2,3,4,5],
             'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
             'subject_id':['sub2','sub4','sub3','sub6','sub5']})
    
    rs = pd.merge(left, right, on='subject_id', how='left')
    print (rs)
    出力結果:
       Name_x  id_x subject_id Name_y  id_y
    0    Alex     1       sub1    NaN   NaN
    1     Amy     2       sub2  Billy   1.0
    2   Allen     3       sub4  Brian   2.0
    3   Alice     4       sub6  Bryce   4.0
    4  Ayoung     5       sub5  Betty   5.0
    
     
    Right Joinの例
    import pandas as pd
    
    left = pd.DataFrame({
             'id':[1,2,3,4,5],
             'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
             'subject_id':['sub1','sub2','sub4','sub6','sub5']})
    
    right = pd.DataFrame(
             {'id':[1,2,3,4,5],
             'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
             'subject_id':['sub2','sub4','sub3','sub6','sub5']})
    
    rs = pd.merge(left, right, on='subject_id', how='right')
    print (rs)
    出力結果:
       Name_x  id_x subject_id Name_y  id_y
    0     Amy   2.0       sub2  Billy     1
    1   Allen   3.0       sub4  Brian     2
    2   Alice   4.0       sub6  Bryce     4
    3  Ayoung   5.0       sub5  Betty     5
    4     NaN   NaN       sub3   Bran     3
    
     
    Outer Joinの例
    import pandas as pd
    
    left = pd.DataFrame({
             'id':[1,2,3,4,5],
             'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
             'subject_id':['sub1','sub2','sub4','sub6','sub5']})
    
    right = pd.DataFrame(
             {'id':[1,2,3,4,5],
             'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
             'subject_id':['sub2','sub4','sub3','sub6','sub5']})
    
    rs = pd.merge(left, right, how='outer', on='subject_id')
    print (rs)
    出力結果:
       Name_x  id_x subject_id Name_y  id_y
    0    Alex   1.0       sub1    NaN   NaN
    1     Amy   2.0       sub2  Billy   1.0
    2   Allen   3.0       sub4  Brian   2.0
    3   Alice   4.0       sub6  Bryce   4.0
    4  Ayoung   5.0       sub5  Betty   5.0
    5     NaN   NaN       sub3   Bran   3.0
    
     
    Inner Joinの例
    接続は索引上で行います。接続(Join)動作は、呼び出したオブジェクトに与えられる。したがって、a.join(b)b.join(a)に等しくない。
    import pandas as pd
    
    left = pd.DataFrame({
             'id':[1,2,3,4,5],
             'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
             'subject_id':['sub1','sub2','sub4','sub6','sub5']})
    
    right = pd.DataFrame(
             {'id':[1,2,3,4,5],
             'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
             'subject_id':['sub2','sub4','sub3','sub6','sub5']})
    
    rs = pd.merge(left, right, on='subject_id', how='inner')
    print (rs)
    出力結果:
       Name_x  id_x subject_id Name_y  id_y
    0     Amy     2       sub2  Billy     1
    1   Allen     3       sub4  Brian     2
    2   Alice     4       sub6  Bryce     4
    3  Ayoung     5       sub5  Betty     5