我想为每个列中仅包含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)]
我确定必须有一个简单的解决方案,尽管我似乎很难找到它。谢谢。
答案 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