过滤具有特定值的所有行,而无需指定列名

时间:2019-02-13 02:40:38

标签: python-3.x pandas

我想为每个列中仅包含False的行筛选数据框。因为列数及其名称可能会有所不同,所以我希望在不显式命名列的情况下这样做。列表中的列名或类似于pandas.DataFrame.all的任何函数都可以。索引需要保留。

bool_dict = {'one':[True, False, False,False], 'two':[False, True, True, False], 'three':[False,False,True,False]}
bool_df = pd.DataFrame(bool_dict)

预期输出是一个包含行索引3的数据帧,即该命令的结果

df_false = bool_df[(bool_df['one']==False) & (bool_df['two']==False) & (bool_df['three']==False)]

我确定必须有一个简单的解决方案,尽管我似乎很难找到它。谢谢。

2 个答案:

答案 0 :(得分:5)

.any()中使用.all()axis=1使其对列无动于衷。通过以下方法检查是否都是False

bool_df[(~bool_df).all(1)]
# or
bool_df[~bool_df.any(1)]

#     one    two  three
#3  False  False  False

答案 1 :(得分:4)

您可能需要sum

bool_df[bool_df.sum(1)==0]
     one  three    two
3  False  False  False

max

bool_df[~bool_df.max(1)]
     one  three    two
3  False  False  False