ホームページ  >  記事  >  バックエンド開発  >  DataFrame2 にはない DataFrame1 内の固有の行を効率的に見つけるにはどうすればよいですか?

DataFrame2 にはない DataFrame1 内の固有の行を効率的に見つけるにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-21 07:28:10650ブラウズ

How Can I Efficiently Find the Unique Rows in DataFrame1 That Are Not in DataFrame2?

2 つのデータフレーム間の違いを見つける

データ分析では、データセット間の不一致を特定することが重要です。 df1 と df2 という 2 つのデータフレームがあるとします。ここで、df2 は df1 のサブセットです。 df1 には存在するが df2 には存在しない一意の行と列を効率的に取得するには、差集合の概念を利用できます。

アプローチ: pd.concat と drop_duplicates**

主なアプローチには、pd.concat を使用して両方のデータフレームを結合し、その後、drop_duplicates を使用して重複する行または列を削除することが含まれます。 keep=False を設定すると、df1 にのみ存在する行または列のみが保持されます。

df3 = pd.concat([df1, df2]).drop_duplicates(keep=False)

警告: 重複の処理

ただし、これはこのメソッドは、両方のデータフレーム自体に重複した値が含まれていないことを前提としています。そうした場合、結果が不正確になる可能性があります。これに対処するために、次の代替アプローチを採用できます。

方法 1: タプルで isin を使用する

この方法では、各行を次のように変換します。 df.apply(tuple, 1) を使用してタプルを作成し、その後 df.apply(tuple, 1).isin(df2.apply(tuple, 1)) を使用してタプルが df2 に存在するかどうかを確認します。結果のデータフレームには、df2 にはない df1 からの一意の行が含まれます。

df1[~df1.apply(tuple, 1).isin(df2.apply(tuple, 1))]

方法 2: インジケーターとのマージ

別のアプローチは、df1 を次のインジケーターとマージすることです。 df2 は、インジケーターを備えた pd.merge を使用して、df1 にのみ存在する行を識別します。ラムダ関数を使用すると、'_merge' 列が 'both' と等しくない行を除外できます。

df1.merge(df2, indicator=True, how='left').loc[lambda x: x['_merge']!='both']

結論

これらを利用することでこのテクニックを使用すると、2 つのデータフレーム間の違いを効果的に見つけて、各データフレームに存在する固有のデータ ポイントについての洞察を得ることができます。

以上がDataFrame2 にはない DataFrame1 内の固有の行を効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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