1. ホーム
  2. pandas

[解決済み] Pandasで共通の列の値に基づいて2つのデータフレームをマージする

2023-07-19 22:13:59

質問

共通の列の値を持つ2つのデータフレームから、特定の列で共通の値を持つマージされたデータフレームを作る行だけを得るにはどうしたらよいですか。

5000行の df1 という形式です。

    director_name   actor_1_name    actor_2_name    actor_3_name    movie_title
0   James Cameron   CCH Pounder Joel David Moore    Wes Studi     Avatar
1   Gore Verbinski  Johnny Depp Orlando Bloom   Jack Davenport   Pirates 
    of the Caribbean: At World's End
2   Sam Mendes   Christoph Waltz    Rory Kinnear    Stephanie Sigman Spectre

と10000行の df2 として

movieId                   genres                        movie_title
    1       Adventure|Animation|Children|Comedy|Fantasy   Toy Story
    2       Adventure|Children|Fantasy                    Jumanji
    3       Comedy|Romance                             Grumpier Old Men
    4       Comedy|Drama|Romance                      Waiting to Exhale

共通の列 'movie_title' には共通の値があり、それに基づいて 'movie_title' が同じ行をすべて取得したい。それ以外の行は削除します。

どんなヘルプ/提案でも結構です。

注:すでに

pd.merge(dfinal, df1, on='movie_title')

で、出力は1行のようになります。

director_name   actor_1_name    actor_2_name    actor_3_name    movie_title movieId title   genres

で、="outer"/"left", "right" の方法ですが、全て試しましたが、多くの共通色が存在するもののNaN削除後は1行も得られませんでした。

どのように解決するのですか?

2つのデータフレームをマージするには、いくつかの方法があります。Pythonで最も一般的な方法は、Pandasのマージ操作を使用することです。

import pandas
dfinal = df1.merge(df2, on="movie_title", how = 'inner')

異なるデータフレームのカラムをマージする場合、同じカラムの名前が曖昧な場合、特に左右の共通カラム名を指定することができます。 'movie_title' として 'movie_name' .

dfinal = df1.merge(df2, how='inner', left_on='movie_title', right_on='movie_name')

さらに具体的に知りたい場合は、pandasのドキュメントを読むとよいでしょう。 merge という操作をしてみてください。