2017-04-08 5 views
2

共通の列の値を持つ2つのデータフレームからマージされたデータフレームを取得して、Pandasの一般的な列の値に基づいて2つのデータフレームをマージする

私は形式としてdf1の5000行を持っている: - 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 

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行の共通列 '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 

と、私はすべてを試してみましたが、なかったのか= "外側"/"左"、 "右" の

多くの一般的なcoloumnは存在しますが、NaNを落とした後には行がありません。

答えて

6

あなたはpd.mergeを使用することができます。

import pandas as pd 
pd.merge(df1, df2, on="movie_title") 

行だけは共通のキーが両方のデータフレームで発見されたために維持されています。左側のデータフレームからすべての行を保持し、一致するキーがあるdf2の値だけを追加する場合は、how="left"を使用できます。

+0

それは が一列のみ \t director_name \t actor_1_name \t actor_2_name \t actor_3_name \t MOVIE_TITLE \t MOVIEID \tタイトル\tジャンル、あなたが唯一のマッチング 'movie_title'を持っていることを意味 –

+2

@Harry_pb、のように来ては動作しません。マージは、文字列が__正確に同じである場合にのみ正しく動作します。 – MaxU

0

いくつかの方法で2つのデータフレームをマージすることができます。 Pythonの最も一般的な方法は、Pandasのマージ操作を使用することです。異なるデータフレームの列に基づいて統合するために

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

、あなたは特別に同じ列の2つの異なる名前の曖昧さの場合は左右共通のカラム名を指定することも、言うことができます - 'movie_name'として'movie_title'

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

あなたも、より具体的にしたい場合は、パンダmerge操作のドキュメントを読むことができます。

関連する問題