根据Pandas中的公共列值合并两个数据帧
问题描述:
如何从具有公共列值的两个数据帧中获取合并数据帧,以便只有那些行才能在特定列中生成具有共同值的合并数据帧。根据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后没有任何一行。
答
您可以使用pd.merge
:
import pandas as pd
pd.merge(df1, df2, on="movie_title")
只有行会保留其公共密钥在两个数据帧中。如果您想要保留左侧数据框中的所有行,并只添加df2
中可用的匹配关键字的值,则可以使用how="left"
。
答
我们可以通过多种方式合并两个数据帧。 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
操作。
它不工作 谈到像只有一排 \t director_name \t ACTOR_1_NAME \t actor_2_name \t actor_3_name \t MOVIE_TITLE \t movieId \t标题\t流派 –
@Harry_pb,这意味着你只有一个匹配'movie_title'。仅当字符串__exactly__相同时,合并才能正常工作。 – MaxU