根据 Pandas 中的公共列值合并两个数据框
Posted
技术标签:
【中文标题】根据 Pandas 中的公共列值合并两个数据框【英文标题】:Merge two data frames based on common column values in Pandas 【发布时间】:2017-09-03 23:41:52 【问题描述】:如何从具有共同列值的两个数据框中获取合并的数据框,以便只有这些行使合并的数据框在特定列中具有共同值。
我有 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')
输出就像一行
director_name actor_1_name actor_2_name actor_3_name movie_title movieId title genres
关于 ="outer"/"left", "right" 的方式,我尝试了所有方法,但在删除 NaN 后没有得到任何行,尽管确实存在许多常见的列。
【问题讨论】:
【参考方案1】:你可以使用pd.merge
:
import pandas as pd
pd.merge(df1, df2, on="movie_title")
仅保留在两个数据帧中都找到公共键的行。如果您想保留左侧数据框中的所有行并且只添加来自df2
的值,其中匹配键可用,您可以使用how="left"
。
【讨论】:
这行不通,好像只有一行director_name actor_1_name actor_2_name actor_3_name movie_title movieId 标题流派 @Harry_pb,这意味着您只有一个匹配的movie_title
。只有当字符串完全相同相同时,合并才能正常工作。
@Harry_pb,你最后是怎么解决这个问题的?我遇到了同样的问题:left df 和 right df 显然有相同的公共列,但是合并的 df 总是空的!
我在上一条评论之后才发现...我的 2 个 DF 中的 common 列看起来一样,只是数字,但实际上,一个 DF 将数字存储在 int64 中,而另一个存储他们在对象!完全把我逼疯了!!【参考方案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
操作的文档。
【讨论】:
【参考方案3】:如果你想合并两个 DataFrame,并且你想要一个合并的 DataFrame,其中只有两个数据帧的共同值会出现,那么请进行内部合并。
import pandas as pd
merged_Frame = pd.merge(df1, df2, on = id, how='inner')
【讨论】:
以上是关于根据 Pandas 中的公共列值合并两个数据框的主要内容,如果未能解决你的问题,请参考以下文章
使用 Pandas:如何根据一个公共键将多行数据组合成一行?