サーチ…
構文
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
例とまったく同じです。