サーチ…
構文
- DataFrame。 right_index = False、sort = False、suffixes =( '_ x'、 '_y')、copy = True、 merge ( right、how = 'inner'、on = None、left_on =インジケータ=偽 ) 
- 列またはインデックスによるデータベース形式の結合操作を実行して、DataFrameオブジェクトをマージします。 
- 列の列を結合すると、DataFrameのインデックスは無視されます。それ以外の場合は、索引または索引の索引を1つまたは複数の列に結合すると、索引が引き継がれます。 
パラメーター
| パラメーター | 説明 | 
|---|---|
| 右 | データフレーム | 
| どうやって | {'left'、 'right'、 'outer'、 'inner'}、デフォルトの 'inner' | 
| left_on | ラベルまたはリスト、または配列のようなものです。左側のDataFrameに参加するフィールド名。列ではなく結合キーとして特定のベクトルを使用する、DataFrameの長さのベクトルまたはベクトルのリストにすることができます | 
| 右に | ラベルまたはリスト、または配列のようなものです。右DataFrameで結合するフィールド名、またはleft_on docsごとのベクトル/リスト | 
| left_index | ブール値、デフォルトはFalseです。左側のDataFrameのインデックスを結合キーとして使用します。 MultiIndexの場合、他のDataFrame(インデックスまたは列数のいずれか)のキーの数は、レベル数と一致する必要があります | 
| right_index | ブール値、デフォルトはFalseです。右側のDataFrameのインデックスを結合キーとして使用します。 left_indexと同じ警告 | 
| ソート | ブール値、デフォルトFals。結果のDataFrameで結合キーを辞書的にソートする | 
| 接尾辞 | 2長のシーケンス(タプル、リスト、...)。左と右のそれぞれに重複する列名に適用する接尾辞 | 
| コピー | ブール値。デフォルトはTrue。 Falseの場合、データを不必要にコピーしないでください | 
| インジケータ | ブール値または文字列、デフォルトはFalseです。 Trueの場合、各行のソースに関する情報とともに、 "_merge"という名前のDataFrameを出力する列を追加します。 stringの場合、各行のソースに関する情報を含む列がDataFrameを出力するために追加され、列の名前がstringの名前になります。情報列はCategorical-typeで、左側のDataFrameにのみマージキーが表示され、右側のDataFrameにのみマージキーが表示され、右側にDataFrameが表示されている場合には「両方」の観測には "left_only"観測のマージキーは両方にあります。 | 
マージ
例えば、2つのテーブルが与えられ、
T1
id    x        y
8    42        1.9
9    30        1.9
T2
id    signal
8    55
8    56    
8    59
9    57
9    58    
9    60
目標は、新しいテーブルを取得することですT3:
id    x        y        s1        s2        s3
8    42        1.9        55        56        58
9    30        1.9        57        58        60
列s1 、 s2 、 s3を作成します。各行は、行に対応しています( idあたりの行数は常に固定で3に等しくなります) 
 join (これはオプションのon引数をとります。これは、渡されたDataFrameがDataFrameのその列に揃うように指定する列または複数の列名です)。したがって、ソリューションは以下のようになります。 
df = df1.merge(df2.groupby( 'id')['signal']。apply(lambda x:x.reset_index(drop = True))unstack()。reset_index())
df
Out[63]: 
   id   x    y   0   1   2
0   8  42  1.9  55  56  59
1   9  30  1.9  57  58  60
私がそれらを分けるならば:
df2t = df2.groupby('id')['signal'].apply(lambda x: x.reset_index(drop=True)).unstack().reset_index()
df2t
Out[59]: 
   id   0   1   2
0   8  55  56  59
1   9  57  58  60
df = df1.merge(df2t)
df
Out[61]: 
   id   x    y   0   1   2
0   8  42  1.9  55  56  59
1   9  30  1.9  57  58  60
2つのデータフレームのマージ
In [1]: df1 = pd.DataFrame({'x': [1, 2, 3], 'y': ['a', 'b', 'c']})
In [2]: df2 = pd.DataFrame({'y': ['b', 'c', 'd'], 'z': [4, 5, 6]})
In [3]: df1
Out[3]: 
   x  y
0  1  a
1  2  b
2  3  c   
In [4]: df2
Out[4]: 
   y  z
0  b  4
1  c  5
2  d  6
内部結合:
2つのDataFramesのキーの共通部分を使用します。
In [5]: df1.merge(df2) # by default, it does an inner join on the common column(s)
Out[5]: 
   x  y  z
0  2  b  4
1  3  c  5
または、2つのデータフレームからキーの共通部分を指定します。
In [5]: merged_inner = pd.merge(left=df1, right=df2, left_on='y', right_on='y')
Out[5]: 
   x  y  z
0  2  b  4
1  3  c  5
外部結合:
2つのDataFramesのキーの和集合を使用します。
In [6]: df1.merge(df2, how='outer')
Out[6]: 
     x  y    z
0  1.0  a  NaN
1  2.0  b  4.0
2  3.0  c  5.0
3  NaN  d  6.0
左結合:
左のDataFrameのキーのみを使用します。
In [7]: df1.merge(df2, how='left')
Out[7]: 
   x  y    z
0  1  a  NaN
1  2  b  4.0
2  3  c  5.0
右結合
正しいDataFrameのキーのみを使用します。
In [8]: df1.merge(df2, how='right')
Out[8]: 
     x  y  z
0  2.0  b  4
1  3.0  c  5
2  NaN  d  6
複数のデータフレームのマージ/連結/結合(水平および垂直)
サンプルデータフレームを生成する:
In [57]: df3 = pd.DataFrame({'col1':[211,212,213], 'col2': [221,222,223]})
In [58]: df1 = pd.DataFrame({'col1':[11,12,13], 'col2': [21,22,23]})
In [59]: df2 = pd.DataFrame({'col1':[111,112,113], 'col2': [121,122,123]})
In [60]: df3 = pd.DataFrame({'col1':[211,212,213], 'col2': [221,222,223]})
In [61]: df1
Out[61]:
   col1  col2
0    11    21
1    12    22
2    13    23
In [62]: df2
Out[62]:
   col1  col2
0   111   121
1   112   122
2   113   123
In [63]: df3
Out[63]:
   col1  col2
0   211   221
1   212   222
2   213   223
データフレーム[df1、df2、df3]のマージ/結合/連結
In [64]: pd.concat([df1,df2,df3], ignore_index=True)
Out[64]:
   col1  col2
0    11    21
1    12    22
2    13    23
3   111   121
4   112   122
5   113   123
6   211   221
7   212   222
8   213   223
データフレームを水平方向にマージ/結合/連結する(インデックスで整列):
In [65]: pd.concat([df1,df2,df3], axis=1)
Out[65]:
   col1  col2  col1  col2  col1  col2
0    11    21   111   121   211   221
1    12    22   112   122   212   222
2    13    23   113   123   213   223
マージ、結合、連結
キー名のマージは同じです
pd.merge(df1, df2, on='key')
キー名のマージは異なります
pd.merge(df1, df2, left_on='l_key', right_on='r_key')
異なるタイプの参加
pd.merge(df1, df2, on='key', how='left')
複数のキーでのマージ
pd.merge(df1, df2, on=['key1', 'key2'])
重複する列の処理
pd.merge(df1, df2, on='key', suffixes=('_left', '_right'))
キーをマージする代わりに行インデックスを使用する
pd.merge(df1, df2, right_index=True, left_index=True)
重複している列に対して例外を与えるので、 .join構文の使用を避ける
左のデータフレームインデックスと右のデータフレーム列でのマージ
pd.merge(df1, df2, right_index=True, left_on='l_key')
コンカレントデータフレーム
垂直に接着した
pd.concat([df1, df2, df3], axis=0)
水平に接着
pd.concat([df1, df2, df3], axis=1)
結合とマージの違いは何ですか?
 rightのデータフレームleft考慮する
left = pd.DataFrame([['a', 1], ['b', 2]], list('XY'), list('AB'))
left
   A  B
X  a  1
Y  b  2
right = pd.DataFrame([['a', 3], ['b', 4]], list('XY'), list('AC'))
right
   A  C
X  a  3
Y  b  4
 join 
 joinは、それぞれのインデックスに基づいてデータフレームに結合したいと考えてください。重複する列がある場合、 joinは左のデータフレームから重複する列名に接尾辞を追加joinことを望みます。私たちの2つのデータフレームには、重複する列名Aます。 
left.join(right, lsuffix='_')
  A_  B  A  C
X  a  1  a  3
Y  b  2  b  4
インデックスは保存されており、4つのカラムがあることに注意してください。 leftから2列、 rightから2列。 
インデックスが整列していない場合
left.join(right.reset_index(), lsuffix='_', how='outer')
    A_    B index    A    C
0  NaN  NaN     X    a  3.0
1  NaN  NaN     Y    b  4.0
X    a  1.0   NaN  NaN  NaN
Y    b  2.0   NaN  NaN  NaN
私はポイントをよりよく説明するために外部結合を使用しました。インデックスが整列していない場合、結果はインデックスの和集合になります。
 joinには左側のデータフレームの特定の列を使用して結合キーとして使用するように指示できますが、右側のインデックスは引き続き使用されます。 
left.reset_index().join(right, on='index', lsuffix='_')
  index A_  B  A  C
0     X  a  1  a  3
1     Y  b  2  b  4
 merge 
 mergeは列の整列と考えてください。デフォルトでは、 mergeは、 mergeする重複する列を探します。 mergeは、ユーザーがパラメータonで使用する重複する列のサブセットを指定できるようにするか、または左側の列とマージする右側の列を個別に指定できるようにすることで、マージキーの制御を強化します。 
 mergeは、インデックスが破棄される結合データフレームを返します。 
この単純な例は、重複する列が'A'ことを見出し、それに基づいて結合します。 
left.merge(right)
   A  B  C
0  a  1  3
1  b  2  4
インデックスは[0, 1] 、 ['X', 'Y'] 
 left_indexまたはright_indexインデックスにマージすることを明示的に指定できます
left.merge(right, left_index=True, right_index=True, suffixes=['_', ''])
  A_  B  A  C
X  a  1  a  3
Y  b  2  b  4
これは上記のjoin例とまったく同じです。