首页 > 解决方案 > 返回包含特定值的多索引 df 中的行

问题描述

我有以下多索引df:

         pageid
sid vid
 1  ABC     dog
    ABC     cat
    ABC     fish
 2  DEF     pig
    DEF     cat
    DEF     fish
 3  GHI     pig
    GHI     cat
    GHI     dog

我想保留只包含一些值的子索引——在这个例子中我将使用 dog。

前:

        pageid
sid vid
 1  ABC     dog
    ABC     cat
    ABC     fish
 2  DEF     pig
    DEF     cat
    DEF     fish
 3  GHI     pig
    GHI     cat
    GHI     dog

之后(仅sid包含pageid带有值的狗)

        pageid
sid vid
 1  ABC     dog
    ABC     cat
    ABC     fish
 3
    GHI     pig
    GHI     cat
    GHI     dog

标签: pythonpandasdataframe

解决方案


这里:

df.groupby('sid').filter(lambda x: x['pageid'].eq('dog').sum() > 0)

它是做什么的:

  1. 按 ID 获取子 DF 的列表
  2. 仅采用其中计数pageid大于的那些组0

或如@db 建议的那样:

df.loc[df['pageid'].eq('dog').groupby('sid').transform(any)]

那是做什么的:

  1. 创建一个掩码,其中每行是Trueif pageIdis dogFalse否则
  2. 按以下方式对屏蔽的行进行分组sid
  3. 将每组屏蔽行转换为一个屏蔽行
  4. 使用该掩码从数据框中获取多组行

推荐阅读