如何将布尔条件向量应用于数据帧的每一列,如:Dataframe [booleanVector,:]

时间:2017-10-09 12:15:48

标签: python pandas dataframe

设IX为一些布尔矢量(或者可以是具有逻辑值的数据帧),  df - 相同len的数据帧。

我希望得到类似 df [IX,:] 的内容,  即对于每列数据帧,获取 IX = true 的那些元素。

问题:有一些简单的方法吗?

我试过:我试过的方法1)df [IX] 2)df.loc [IX,:]似乎不起作用

df = pd.DataFrame(data={ 'Col' : 1. , 'Col2' : 1.1 }, index= ['A', 'B'])
df2 = pd.DataFrame(data={ 'ColDF2' : 2.  }, index= ['C', 'D'])
IX = df2>0
IX.index = df.index
print(df)
print(df2)
print(IX)
print(df[IX] )

输出:

   Col  Col2
A  1.0   1.1
B  1.0   1.1
   ColDF2
C     2.0
D     2.0
  ColDF2
A   True
B   True
   Col  Col2
A  NaN   NaN
B  NaN   NaN

我想得到:

   Col  Col2
A  1.0   1.1
B  1.0   1.1

1 个答案:

答案 0 :(得分:1)

您需要为条件选择列,然后在boolean indexing创建的boolean numpy array旁边使用values

IX = df2['ColDF2']>0

print(df[IX.values])
   Col  Col2
A  1.0   1.1
B  1.0   1.1

print(IX.values)
[ True  True]

或者在掩码中创建相同的索引值,如答案所示:

IX = df2['ColDF2'] > 0
IX.index = df.index
print(df[IX])
   Col  Col2
A  1.0   1.1
B  1.0   1.1

print(IX)
A    True
B    True
Name: ColDF2, dtype: bool

如果df2只有一列:

IX = df2>0
print (IX)
   ColDF2
C    True
D    True

print(df[IX.values])
   Col  Col2
A  1.0   1.1
B  1.0   1.1

print (IX.values)
[[ True]
 [ True]]