2017-04-08 180 views
2

如何從具有公共列值的兩個數據幀中獲取合併數據幀,以便只有那些行才能在特定列中生成具有共同值的合併數據幀。根據Pandas中的公共列值合併兩個數據幀

我有5000行的df1的格式: - 的df2

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行作爲

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') 

和輸出的到來猶如一排

director_name actor_1_name actor_2_name actor_3_name movie_title movieId title genres 

,並就如何= 「外」/ 「左」, 「右」,我嘗試了所有和沒儘管有許多常見的顏色存在,但在放棄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流派 –

+2

@Harry_pb,這意味着你只有一個匹配'movie_title'。僅當字符串__exactly__相同時,合併才能正常工作。 – MaxU

0

我們可以通過多種方式合併兩個數據幀。 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') 

如果您想更具體的,你可以閱讀大熊貓的文檔merge操作。