另一个数据框的布尔数据框过滤器

时间:2018-09-20 13:55:18

标签: python pandas dataframe

以下数据框df1包含数值

   IDs          Value1      Value2        Value     Value4
   AB              1          1             1       5
   BC              2          2             2       3
   BG              1          1             4       1
   RF              2          2             2       7

,此数据帧df2包含布尔值:

   Index          0                1             2         3
   1              True           False          True       True
   2              False          False          True       False
   3              False          False          True       False
   4              False          False          False      False

具有相同数量的列和行。

我需要以以下方式对df1进行子集设置:仅获取df2中至少具有True值的列。

含义如下:

   IDs          Value1         Value3     Value4
   AB              1              1       5
   BC              2              2       3
   BG              1              4       1
   RF              2              2       7

我尝试了以下代码:

df2_true = np.any(df2,axis=1)

但是,上面的行返回一个列表,该列表不能在这里使用:

result = df1[:,df2_true]

欢迎任何帮助

3 个答案:

答案 0 :(得分:3)

loc与{{1}(index)中的np.any一起使用:

axis=0

答案 1 :(得分:3)

我认为它将起作用

// the next 3 cards in the deck
for i in 0...2 {
    if i > (cards.count - 1) { break }
    let card = cards[i]
...
}

答案 2 :(得分:1)

您已经朝着正确的方向前进,但是,由于您对屏蔽列感兴趣,因此您只需要在另一轴上应用np.any()操作,然后将布尔掩码应用于原始数据帧的columns属性: / p>

masked_df = df1.columns[df2.any(axis=0)]