ホームページ >バックエンド開発 >Python チュートリアル >ある Pandas DataFrame には存在するが、別の Pandas DataFrame には存在しない行を識別する方法

ある Pandas DataFrame には存在するが、別の Pandas DataFrame には存在しない行を識別する方法

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-03 10:45:44310ブラウズ

How to Identify Rows Present in One Pandas DataFrame but Not Another?

Pandas DataFrames の共通でない行の識別

複数のデータ フレームを操作する場合、一方には存在するが他方には存在しない行を識別する必要があります。 2 つのデータ フレーム df1 と df2 があるとします。ここで、df2 は df1 のサブセットです。

df2 に存在しない行を df1 から抽出するにはどうすればよいでしょうか?

次の例を考えてみましょう:

import pandas as pd

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]})

print("df1:")
print(df1)

print("\ndf2:")
print(df2)

出力:

   col1  col2
0     1    10
1     2    11
2     3    12
3     4    13
4     5    14
5     3    10

   col1  col2
0     1    10
1     2    11
2     3    12

私たちの目的は、df1 内のそうでない行を見つけることです。 df2 に存在します。

解決策:

珍しい行を正確に識別するには、col1 列とcol2 列の両方で df1 と df2 の間の左結合を実行する必要があります。 df2 内の重複は削除されます。さらに、indicator=True を指定して、マージされた各行のソースを示す追加の列を作成します。

結果のデータ フレーム df_all には、df1 と df2 の両方のすべての行と、追加の列 _merge が含まれます。行は両方のデータ フレーム (both)、df1 のみ (left_only)、または df2 のみから生成されます。 (right_only).

df_all = df1.merge(df2.drop_duplicates(), on=['col1', 'col2'], how='left', indicator=True)

ブール条件 df_all['_merge'] == 'left_only'.

df_uncommon = df_all[df_all['_merge'] == 'left_only']
print("\nUncommon rows in df1:")
print(df_uncommon)

を使用して、df_all をフィルター処理して df1 から珍しい行を抽出できるようになりました。これにより、目的の出力が返されます:

   col1  col2 _merge
3     4    13  left_only
4     5    14  left_only
5     3    10  left_only

重複による左結合を利用することにより削除と _merge 列を使用すると、df2 に存在しない行を df1 から効果的に識別して抽出できます。

以上がある Pandas DataFrame には存在するが、別の Pandas DataFrame には存在しない行を識別する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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