ホームページ >バックエンド開発 >Python チュートリアル >2 つの DataFrame を比較するときに、Pandas DataFrame 内の固有の行を効率的に識別する方法

2 つの DataFrame を比較するときに、Pandas DataFrame 内の固有の行を効率的に識別する方法

Barbara Streisand
Barbara Streisandオリジナル
2024-12-15 21:07:13287ブラウズ

How to Efficiently Identify Unique Rows in Pandas DataFrames When Comparing Two DataFrames?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。