2017-04-08 182 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操作。