【问题标题】:Retrieving columns based on condition in a DataFrame根据 DataFrame 中的条件检索列
【发布时间】:2014-12-26 17:28:12
【问题描述】:

假设我在 pandas 中有以下数据框:

import pandas as pd
pd.DataFrame({'A': [True, False], 'B':[False, True], 'C':[True, True], 'D':[False, False], 'E':[False, False]})

我怎样才能只获得 True 的列?我有一个包含 2000 多列的 DataFrame,仅填充了 FalseTrue 值,对于每一行,我想获得 True 列。

【问题讨论】:

  • 澄清一下,您的示例的预期输出是什么?
  • 例如,我想获取第 0 行的列表 ['A', 'C'] 和第 1 行的列表 ['B', 'C']

标签: python pandas dataframe


【解决方案1】:

您可以使用 DataFrame df 中的任何行作为列标签 df.columns 的布尔索引。这将返回一个 Index 仅包含“真”列的对象:

>>> df.columns[df.loc[0]]
Index([u'A', u'C'], dtype=object)

由于这是一个 Index 对象而不是 Python 列表,您可以使用 tolist() 将其变成一个:

>>> df.columns[df.loc[0]].tolist()
['A', 'C']

【讨论】:

  • 不确定您是否需要values;在当前的pandas 中,看起来tolistIndex 的一个方法。
  • @DSM 谢谢!我以前从未检查过。很高兴知道。
  • 非常感谢!这正是我想要的。
  • @efajardo - 没问题,很高兴它有帮助。
【解决方案2】:

我假设您使用 [row][column] 结构。以下代码应该可以工作:

>>> dictionary = {'A': [True, False], 'B':[False, True], 'C':[True, True], 'D':[False, False], 'E':[False, False]}
>>> itemList = list(dnaComplements.items())
>>> [x[0] for x in itemList if x[1][1] == True]

会回来

>>>    ['B', 'C']
>>> 

【讨论】:

    【解决方案3】:

    如果你想知道哪一列全部为真:

    >>> L = pd.DataFrame({'A': [True, False], 'B':[False, True], 'C':[True, True], 'D':[False, False], 'E':[False, False]})
    
    >>> L
           A      B     C      D      E
    0   True  False  True  False  False
    1  False   True  True  False  False
    
    >>> M = lambda x: x.all()
    >>> P = L.apply(M)
    >>> L = [ col for col in dict(P) if P[col]]
    >>> L
    ['C']
    

    【讨论】:

      猜你喜欢
      • 2020-12-30
      • 2014-08-12
      • 2014-06-19
      • 1970-01-01
      • 2014-04-16
      • 2019-01-11
      • 2019-02-15
      • 2021-05-23
      • 1970-01-01
      相关资源
      最近更新 更多