ホームページ > バックエンド開発 > Python チュートリアル > ある Pandas DataFrame から別の Pandas DataFrame に存在しない行を効率的に抽出する方法

ある Pandas DataFrame から別の Pandas DataFrame に存在しない行を効率的に抽出する方法

Susan Sarandon
リリース: 2024-12-06 18:44:12
オリジナル
727 人が閲覧しました

How to Efficiently Extract Rows from One Pandas DataFrame that are Absent in Another?

あるデータフレームから別のデータフレームから除外された行を取得する

パンダでは、重複する可能性のあるデータを含む複数のデータフレームがあるのが一般的です。頻繁に発生するタスクの 1 つは、あるデータフレームから別のデータフレームに存在しない行を分離することです。この操作は、サブセットを操作する場合やデータをフィルター処理する場合に特に便利です。

問題の定式化:

2 つの pandas データフレームがあり、df1 には df2 と比較した行のスーパーセットが含まれているとします。 df2 では見つからない行を df1 で取得することを目的としています。以下の例は、このシナリオを簡単なケースで示しています。

import pandas as pd

df1 = pd.DataFrame(data={'col1': [1, 2, 3, 4, 5], 'col2': [10, 11, 12, 13, 14]})
df2 = pd.DataFrame(data={'col1': [1, 2, 3], 'col2': [10, 11, 12]})

print(df1)
print(df2)

# Expected result:
#   col1  col2
# 3     4    13
# 4     5    14
ログイン後にコピー

解決策:

この問題に効果的に対処するために、左結合として知られる手法を採用します。この操作は、df1 からのすべての行が確実に保持されるようにしながら、df1 と df2 をマージします。さらに、マージ後の各行の起点を識別するためのインジケーター列が含まれています。 df2 からの一意の行を活用し、重複を除外することで、望ましい結果が得られます。

以下の Python コードは、このソリューションを実装しています。

df_all = df1.merge(df2.drop_duplicates(), on=['col1', 'col2'], how='left', indicator=True)
result = df_all[df_all['_merge'] == 'left_only']
ログイン後にコピー

説明:

  1. 左結合: マージ関数df1 と df2.drop_duplicates() の間の左結合を実行します。この操作は、列col1とcol2の一致する値に基づいて、df1の行とdf2の行をマージします。
  2. マージインジケータ: インジケータパラメータは、_mergeという名前の追加の列を含めるためにTrueに設定されます。結果のデータフレーム df_all に含まれます。この列は各行の起点を示します。 df1 と df2 の両方に存在する行の場合は「both」、df1 のみに存在する行の場合は「left_only」、df2 のみの行の場合は「right_only」です。
  3. 'left_only' でフィルター: df2 にない行を df1 から分離するには、 _merge が「left_only」に等しい行をチェックすることにより、df_all データフレームを検証します。これにより、望ましい結果が得られます。

一般的な落とし穴の回避:

一部のソリューションでは、一致するのではなく、個々の列の値が誤ってチェックされる可能性があることに注意することが重要です。全体としての行。このようなアプローチでは、以下の例に示すように、不正確な結果が生じる可能性があります。

~df1.col1.isin(common.col1) & ~df1.col2.isin(common.col2)
ログイン後にコピー

このコードでは、行内の値の同時出現が考慮されていないため、df1 の行に個別に出現する値がある場合、不正確な結果が生成される可能性があります。

上記の左結合アプローチを採用することで、派生行が df1 専用のものとして正しく識別されるようになります。この手法は、あるデータフレームには存在するが別のデータフレームには存在しない行を抽出するための信頼性の高い効率的なソリューションを提供します。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート