ホームページ > バックエンド開発 > Python チュートリアル > 2 つの Pandas DataFrame 間の違いを効率的に見つけるにはどうすればよいですか?

2 つの Pandas DataFrame 間の違いを効率的に見つけるにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-25 20:21:12
オリジナル
585 人が閲覧しました

How Can I Efficiently Find the Differences Between Two Pandas DataFrames?

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

pandas データ フレームを使用する場合、2 つのデータ フレームを比較する必要がある状況がよくあります。そしてそれらの間の違いを抽出します。たとえば、ベース データ フレーム (df1) とサブセット データ フレーム (df2) があり、df2 には存在しない df1 のすべての行と列を含む新しいデータ フレーム (df3) を作成したいとします。

drop_duplicates の使用

これを実現する最も直接的な方法は、drop_duplicates を使用することです。 関数。 df1 と df2 を連結し、連結されたデータ フレームに Drop_duplicates を適用すると、重複する行を削除し、一意の行のみを含むデータ フレームを取得できます。

pd.concat([df1, df2]).drop_duplicates(keep=False)
ログイン後にコピー

重複の処理

ただし、df1 または df2 自体に重複行が含まれている場合は、drop_duplicates アプローチが使用されます。誤った出力が発生する可能性があります。これに対処するには、元の重複を保持する代替メソッドを使用できます。

メソッド 1: タプルで isin を使用する

このメソッドでは、データ フレームの各行を次のように変換します。タプルを作成し、そのタプルが両方のデータ フレームに存在するかどうかを確認します。他のデータ フレームのどのタプルにも一致しない行は、差分データ フレームに含まれます。

df1[~df1.apply(tuple, 1).isin(df2.apply(tuple, 1))]
ログイン後にコピー

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

別このアプローチには、インジケーター列を使用して df1 と df2 をマージすることが含まれます。マージで how='left' を指定すると、df2 に対応する行がない df1 の行には、left_only の _merge 列値が割り当てられます。その後、このインジケーター列に基づいて行をフィルター処理して、差分データ フレームを取得できます。

df1.merge(df2, indicator=True, how='left').loc[lambda x: x['_merge'] != 'both']
ログイン後にコピー

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

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