【问题标题】:pandas check if value exists in one specific index in a MultiIndex dataframepandas 检查 MultiIndex 数据帧中的一个特定索引中是否存在值
【发布时间】:2021-08-23 11:09:42
【问题描述】:

我有一个名为 dfMultiIndex 数据框,其中包含 3 个 indexes(水果、颜色、味道)。我想搜索 1 个特定的 index,即 indexColor 并查看其中是否存在 value

例如:代码看起来像这样。 Color 是数据框中的 index 而不仅仅是一列。

if 'purple' in 'Color':
    print('yes')
else:
    print('no')

我只希望它搜索Color 而不是任何其他indexes/columns

                       Quantity     Quality
Fruit   Color   Taste
apple   red     tart     12          good
lemon   yellow  sour     11          average
grapes  purple  sweet     5          bad
lime    green   citrus    3          excellent

非常感谢您的宝贵时间!

【问题讨论】:

    标签: python pandas dataframe indexing


    【解决方案1】:

    您还可以检查该值是否在index.unique(level) 中。这样就不需要将整个索引复制到列表中。它还可能使后续搜索更快。

    if "purple" in df.index.unique(level="Color"): 
        print("yes")
    else: 
        print("no")
    

    【讨论】:

      【解决方案2】:

      您可以使用get_level_values进行过滤。

      if "purple" in df.index.get_level_values('Color'):
          print('yes')
      else:
          print('no')
      

      【讨论】:

        【解决方案3】:

        如果你想要一个表格输出,你可以使用它:

        def check(data:pd.DataFrame,l:list):
            c = data.index.get_level_values("Color").isin(l)
            return np.where(c,'yes','no')
        
        df['Result'] = check(df,['purple'])
        

        print(df)
        
                               Quantity    Quality Result
        Fruit  Color  Type                              
        apple  red    tart          12       good     no
        lemon  yellow sour          11    average     no
        grapes purple sweet          5        bad    yes
        lime   green  citrus         3  excellent     no
        

        【讨论】:

          【解决方案4】:

          尝试xs 从 DataFrame 中获取横截面:

          df.xs('purple', level=1, drop_level=False)
          
                               Quantity Quality
          Fruit  Color  Type                   
          grapes purple sweet         5     bad
          

          只是为了测试它是否存在检查横截面是否为empty

          df.xs('purple', level=1).empty
          
          if not df.xs('purple', level=1).empty:
              print('yes')
          else:
              print('no')
          

          或者reset_index 并使用any 来查看是否有任何匹配项:

          df.reset_index('Color')['Color'].eq('purple').any()
          
          True
          
          if df.reset_index('Color')['Color'].eq('purple').any():
              print('yes')
          else:
              print('no')
          

          【讨论】:

            猜你喜欢
            • 2022-11-28
            • 2023-02-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-01-01
            • 2018-06-19
            • 2021-12-29
            相关资源
            最近更新 更多