繁体   English   中英

如何基于另一个数据框过滤多索引数据框

[英]How to filter a multi-index dataframe based on another dataframe

我有两个数据框,其中一个较大,具有名称和姓氏,它们定义为多索引(家族和名称)数据框:

                Age   Weight 
Family   Name
         Marge
SIMPSON  Bart
         Lisa    
         Homer

         Harry
POTTER   Lilian
         Lisa
         James

而另一个df较小,仅包含第一个df的一些名称:

Family   Name
SIMPSON  Lisa
SIMPSON  Bart
POTTER   Lisa

我想过滤第一个df以仅显示第二个df中存在的名称。
为了更好地解释,作为参考,在Excel中,我将创建一个额外的列和类型(假设第二个df在Sheet2中)
=COUNTIFS(Sheet2!A:Sheet2!A,A1,Sheet2!B:Sheet2!B,B1)
比我将在创建的列中过滤等于1的行。
附:我不是问如何复制Excel代码,因为我知道很可能在python中有一种简单的方法。

您的df1具有多个索引,因此普通过滤器将无法正常工作,我们可以尝试reindex

df1 = df1.reindex(pd.MultiIndex.from_frame(df2))

join

df2.join(df1, on=df1.index.names).set_index(df1.index.names)

              Age Weight
Family  Name            
SIMPSON Lisa  NaN    NaN
        Bart  NaN    NaN
POTTER  Lisa  NaN    NaN

merge

 df1.merge(df2, on=df1.index.names).set_index(df1.index.names)

              Age Weight
Family  Name            
SIMPSON Lisa  NaN    NaN
        Bart  NaN    NaN
POTTER  Lisa  NaN    NaN

假设df1是具有MutiIndex的较大数据帧,而df2是具有名称的较小数据帧。

然后,您可以执行以下操作:

names = set(df2.Name.astype(str).values)
df1 = df1.loc[df1.index.get_level_values('Name').isin(names)]

暂无
暂无

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

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