繁体   English   中英

按另一个数据框中的两列过滤一个数据框

[英]Filtering a dataframe by two columns in another dataframe

我需要一些有关熊猫问题的提示。

我有以下DataFrame df1,其中包含我需要保留在输出数据框中的日期中的名称:

name      date          column_1     column_11     
Anne      2018-01-01    some info1    some info11
John      2018-01-01    some info1    some info11
Mark      2018-02-01    some info1    some info11
Ethan     2018-03-01    some info1    some info11
Anne      2018-04-01    some info1    some info11
Ethan     2018-04-01    some info1    some info11

我还有另一个DataFrame df2,它包含我的数据样本中的所有名称和日期:

name     date           column_2    column_22
Bob      2018-01-01     some info2   some info22
Bob      2018-01-01     some info2   some info22
Anne     2018-01-01     some info2   some info22
John     2018-01-01     some info2   some info22
Mark     2018-02-01     some info2   some info22
Mark     2018-02-01     some info2   some info22
Ethan    2018-03-01     some info2   some info22
Anne     2018-04-01     some info2   some info22
Anne     2018-04-01     some info2   some info22
Ethan    2018-04-01     some info2   some info22
Carl     2018-01-01     some info2   some info22
Joe      2018-01-01     some info2   some info22

而且,作为输出,我需要一个像df1一样的DataFrame,但所有列都在df2中。

请注意,df1和df2除我显示的列外还有其他列,因此它们具有不同的信息。 事情是,我想要df2中的列,但只包含df1中显示的日期中的名称。

样本输出为:

name      date          column_2     column_22     
Anne      2018-01-01    some info2    some info22
John      2018-01-01    some info2    some info22
Mark      2018-02-01    some info2    some info22
Mark      2018-02-01    some info2    some info22
Ethan     2018-03-01    some info2    some info22
Anne      2018-04-01    some info2    some info22
Anne      2018-04-01    some info2    some info22    
Ethan     2018-04-01    some info2    some info22

注意:

在做:

df = df2.merge(df1)

没工作

笔记2:

df1包含来自df2的汇总和过滤数据,这就是df1中的行少于df2中的行的原因。 我只想在df2中保留包含df1中的名称和日期的行。

这些解决方案均无效,因此我认为也许这种解释将有助于获得正确的分析服务。

我将执行以下操作:

df_out = (df1.reset_index()[["name", "date"]]
          .merge(df2.reset_index(), on=["name", "date"], how="inner"))

我将使用中间DataFrames 这虽然效率较低,但是可以使您对正在发生的事情有更多的了解。

仅使用df1的名称和日期

df_key = df1.loc[:, ["name", "date"]] 

使用键表和df2内部联接 (在本文中称为自然df2 ,它将仅生成名称和日期匹配的记录

df_out_1 = df_2.merge(
        df_key, 
        how="inner", 
        left_on=["name", "date"], 
        right_on=["name", "date"]
] 

从结果联接中选择所需的列,然后完成

df_out_2 = df_out_1.loc[:, ["name", "date", "column_2", "column_22"]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM