Pandas データフレーム内の固有の行の取得
2 つの Pandas データフレームがある場合、多くの場合、そのうちの 1 つにのみ存在する行を識別する必要があります。これは、マージ操作を利用することで効果的に実現できます。
たとえば、次のデータフレームを考えてみましょう:
df1 = pd.DataFrame(data={'col1': [1, 2, 3, 4, 5, 3], 'col2': [10, 11, 12, 13, 14, 10]}) df2 = pd.DataFrame(data={'col1': [1, 2, 3], 'col2': [10, 11, 12]})
df2 に存在しない行を df1 から取得するには、 df1 と df2 の間を左結合します。 df1 の各行が df2 の 1 つの行と確実に一致するようにするには、まず df2 から重複する行を削除する必要があります。これは、drop_duplicates() 関数を使用して行うことができます。
df_all = df1.merge(df2.drop_duplicates(), on=['col1', 'col2'], how='left', indicator=True)
結果の df_all データフレームには、各行が df1 と df2 (「両方」) の両方から来たかどうかを示す _merge という名前の追加列が含まれます。 df1 のみ ('left_only')、または df2 からのみ('right_only').
col1 col2 _merge 0 1 10 both 1 2 11 both 2 3 12 both 3 4 13 left_only 4 5 14 left_only 5 3 10 left_only
df2 に存在しない行を df1 から抽出するには、_merge が 'left_only' に等しい行を選択するだけです:
rows_not_in_df2 = df_all[df_all['_merge'] == 'left_only']
col1 col2 0 4 13 1 5 14 2 3 10
不正解を避けるアプローチ
行を全体として考慮しない誤った解決策を避けることが重要です。一部のソリューションでは、行内の個々の値が他のデータフレームに存在するかどうかのみをチェックするため、不正確な結果が生じる可能性があります。
たとえば、データ [3, 10] を持つ別の行を df1 に追加したとします。は df2 にも存在しますが、2 つの列の値が異なるため、間違ったアプローチでは依然として df2 に存在しないと認識されてしまいます。ただし、私たちのアプローチでは、両方の列に同じ値が既に df2 に存在するため、存在しないものとして正しく識別されます。
以上が2 つの DataFrame を比較するときに、Pandas DataFrame 内の固有の行を効率的に識別する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。