今日、私はパンダの「マージ」機能をもう少し深く掘り下げようとしていましたが、ドキュメントで報告されているように、「検証」オプションが見つかりました。
検証:文字列、デフォルトなし
指定されている場合、マージが指定されたタイプであるかどうかを確認します。
「one_to_one」または「1:1」:マージキーが左右のデータセットの両方で一意であるかどうかを確認します。 「one_to_many」または「1:m」:マージキーが左側のデータセットで一意であるかどうかを確認します。 「many_to_one」または「m:1」:マージキーが正しいデータセットで一意であるかどうかを確認します。 「many_to_many」または「m:m」:許可されますが、チェックは行われません。
この関数をどこでどのように使用するかについての実用的な例を探し回っていましたが、見つかりませんでした。さらに、マージしていたDataFrameのグループに適用しようとしても、出力が変更されていないようです。誰かが私にそれをよりよく理解させるための実用的な例を教えてもらえますか?
前もって感謝します、
マティア
新しいvaldate
パラメータは、検証が失敗した場合にMergeError
を発生させます。例:
df1 = pd.DataFrame({'a':list('aabc'),'b':np.random.randn(4)})
df2 = pd.DataFrame({'a':list('aabc'),'b':np.random.randn(4)})
print(df1)
print(df2)
a b
0 a -2.557152
1 a -0.145969
2 b -1.629560
3 c -0.233517
a b
0 a -0.352038
1 a 0.490438
2 b 0.319452
3 c -0.599481
ここで、列'a'
をvalidate
なしでマージすると:
In[39]:
df1.merge(df2, on='a')
Out[39]:
a b_x b_y
0 a -2.557152 -0.352038
1 a -2.557152 0.490438
2 a -0.145969 -0.352038
3 a -0.145969 0.490438
4 b -1.629560 0.319452
5 c -0.233517 -0.599481
これは機能しますが、列「b」が異なるため、「a」の行が増えます。validate='1:1'
を渡すと、エラーが発生します。
MergeError: Merge keys are not unique in either left or right dataset; not a one-to-one merge
validate='1:m'
を渡すと、別のエラーが発生します。
MergeError: Merge keys are not unique in left dataset;not a one-to-many merge
'm:m'
を渡すと、これも検証に失敗します。
In[42]:
df1.merge(df2, on='a',validate='m:m')
Out[42]:
a b_x b_y
0 a -2.557152 -0.352038
1 a -2.557152 0.490438
2 a -0.145969 -0.352038
3 a -0.145969 0.490438
4 b -1.629560 0.319452
5 c -0.233517 -0.599481
エラーは発生せず、validate
paramを渡さなかった場合、同じマージされたdfを取得します
APIドキュメントには例が示されていませんが、 新機能 セクションには例があり、元の github拡張機能 にも背景情報が記載されています。