如何从具有公共列值的两个数据帧获得合并数据帧,使得仅那些行使合并数据帧在特定列中具有共同值。
我有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
以及如何=“外”/“左”,“右”,我尝试了所有并且在放弃NaN之后没有获得任何行,尽管存在许多常见的coloumn。
答案 0 :(得分:23)
您可以使用pd.merge
:
import pandas as pd
pd.merge(df1, df2, on="movie_title")
仅保留在两个数据框中都找到公用密钥的行。如果您想保留左侧数据框中的所有行,并且只添加匹配键可用的df2
值,则可以使用how="left"
。
答案 1 :(得分:15)
我们可以通过多种方式合并两个数据框。 python中最常见的方法是在Pandas中使用合并操作。
import pandas
dfinal = df1.merge(df2, on="movie_title", how = 'inner')
对于基于不同数据框的列的合并,您可以指定左右公共列名称,特别是在同一列的两个不同名称含糊不清的情况下,我们可以说 - 'movie_title'
为'movie_name'
。< / p>
dfinal = df1.merge(df2, how='inner', left_on='movie_title', right_on='movie_name')
如果您想要更具体,可以阅读pandas merge
操作的文档。
答案 2 :(得分:3)
如果要合并两个数据框,并且要合并的数据框仅出现两个数据框中的公共值,则进行内部合并。
<div class="row">
@(Html.Kendo().Grid<Entity.MasterEntity.StateMaster>()
.Name("StateGrid")
.Columns(columns =>
{
columns.Bound(p => p.StateName).Filterable(ftb => ftb.Cell(cell => cell.ShowOperators(true).Operator("contains"))).Width(120);
columns.Bound(p => p.Abbr).Filterable(ftb => ftb.Cell(cell => cell.ShowOperators(true).Operator("contains"))).Width(120).MinScreenWidth(800);
columns.Command(command => { command.Edit(); command.Destroy(); }).Width(70);
})
.ToolBar(toolbar =>
{
toolbar.ClientTemplateId("toolbarStatus");
})
.NoRecords(e => e.Template("<div class='alert alert-warning' style='padding:3px'><h6 class='bold'><i>No data found!</i></h6></div>"))
.Pageable(p => { p.Refresh(true); p.PageSizes(true); }).Navigatable()
.Sortable(s => s.SortMode(GridSortMode.MultipleColumn)).Scrollable(s => s.Enabled(true))
.HtmlAttributes(new { style = "height:100%;" })
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(10)
.ServerOperation(true)
.Model(m =>
{
m.Id(s => s.StateId);
m.Field(f => f.StateName);
m.Field(f => f.Abbr);
m.Field(f => f.RecordStatus);
})
.Read(read => read.Action("GetStateList", "Masters"))
)
.Resizable(resize => resize.Columns(false))
)
</div>