ホームページ >バックエンド開発 >Python チュートリアル >ある Pandas DataFrame には存在するが、別の Pandas DataFrame には存在しない行を識別する方法
複数のデータ フレームを操作する場合、一方には存在するが他方には存在しない行を識別する必要があります。 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 サイトの他の関連記事を参照してください。