【问题标题】:Apply two filter conditions on python pandas dataframe groupby在 python pandas dataframe groupby 上应用两个过滤条件
【发布时间】:2016-08-28 06:26:26
【问题描述】:

我有一个 Pandas DataFrame 如下:

In [28]: df = pd.DataFrame({'A':['CA', 'FO', 'CAP', 'CP'],
                            'B':['Name1', 'Name2', 'Name3', 'Name4'],
                            'C':['One', 'Two', 'Other', 'Some']})

In [29]: df
Out[29]:
    A      B      C
0   CA  Name1    One
1   FO  Name2    Two
2  CAP  Name3  Other
3   CP  Name4   Some

我正在尝试计算 A 列中所有值为 'CA''CP' 的记录,为此我正在执行下一个:

In [30]: len(df.groupby('A').filter(lambda x: x['A'] == 'CA'))
Out[30]: 1

有一种方法可以在一个句子中获取这两个信息吗?因为如果我尝试做这样的事情:

In [32]: len(df.groupby('A').filter(lambda x: x['A'] == 'CA' or
   ....:                                      x['A'] == 'CP'))

我收到此错误:

ValueError                                Traceback (most recent call last)
<ipython-input-32-111c3fde30f2> in <module>()
----> 1 len(df.groupby('A').filter(lambda x: x['A'] == 'CA') or
      2                                      x['A'] == 'CP')

c:\python27\lib\site-packages\pandas\core\generic.pyc in __nonzero__(self)
    885         raise ValueError("The truth value of a {0} is ambiguous. "
    886                          "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
--> 887                          .format(self.__class__.__name__))
    888
    889     __bool__ = __nonzero__

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

【问题讨论】:

    标签: python pandas filter dataframe


    【解决方案1】:

    使用isin 并在获取大小之前传递一个列表来过滤df:

    In [4]:
    len(df[df['A'].isin(['CA','CP'])])
    
    Out[4]:
    2
    

    【讨论】:

      【解决方案2】:

      我认为您不需要分组,只需使用掩码和“或”运算符(在熊猫中为|):

      In [3]: df
      Out[3]: 
           A      B      C
      0   CA  Name1    One
      1   FO  Name2    Two
      2  CAP  Name3  Other
      3   CP  Name4   Some
      
      In [4]: c = df[(df['A']=='CA') | (df['A']=='CP')]
      
      In [5]: c
      Out[5]: 
          A      B     C
      0  CA  Name1   One
      3  CP  Name4  Some
      
      In [6]: len(c)
      Out[6]: 2
      

      【讨论】:

      • 感谢您的帮助,它有效。我试图做同样的事情,但由于某种原因我无法让它工作,我想这是使用 ([ 的错误
      猜你喜欢
      • 2023-02-07
      • 1970-01-01
      • 2018-07-22
      • 2021-03-05
      • 2017-04-11
      • 2023-04-02
      • 2019-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多