サーチ…


構文

  • DataFrame。 right_index = False、sort = False、suffixes =( '_ x'、 '_y')、copy = True、 mergeright、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

s1s2s3を作成します。各行は、行に対応しています( 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例とまったく同じです。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow