多个列上的熊猫数据框布尔掩码

Fou*_*ier 5 python boolean dataframe pandas

我有一个数据框(df),其中包含几列具有实际测量值的列,而这些列中的每一列都具有不确定性(dA,dB,...)的相应列数(A,B,...):

   A    B    dA      dB
0 -1    3    0.31    0.08
1  2   -4    0.263   0.357
2  5    5    0.382   0.397
3 -4   -0.5  0.33    0.115
Run Code Online (Sandbox Code Playgroud)

我应用了一个函数来根据我的定义在测量列中查找有效的值

df[["A","B"]].apply(lambda x: x.abs()-5*df['d'+x.name] > 0)
Run Code Online (Sandbox Code Playgroud)

这将返回一个布尔数组:

     A          B 
0    False      True
1    True       True
2    True       True
3    True       False
Run Code Online (Sandbox Code Playgroud)

我想使用此数组在单个列中选择条件为true的数据帧中的行,例如A- >第1-3行,还查找所有输入列的条件为true的行,例如第1行和2。有没有一种有效的方法可以对付熊猫?

Sco*_*ton 3

您可以使用 apply 语句的结果来从原始数据帧中选择布尔索引:

results = df[["A","B"]].apply(lambda x: x.abs()-5*df['d'+x.name] > 0)
Run Code Online (Sandbox Code Playgroud)

它返回上面的布尔数组:

       A      B
0  False   True
1   True   True
2   True   True
3   True  False
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用此数组从原始数据集中选择行,如下所示:

选择 A 为 True 的情况:

df[results.A]

   A    B     dA     dB
1  2 -4.0  0.263  0.357
2  5  5.0  0.382  0.397
3 -4 -0.5  0.330  0.115
Run Code Online (Sandbox Code Playgroud)

选择 A 或 B 为 true 的情况:

df[results.any(axis=1)]

   A    B     dA     dB
0 -1  3.0  0.310  0.080
1  2 -4.0  0.263  0.357
2  5  5.0  0.382  0.397
3 -4 -0.5  0.330  0.115
Run Code Online (Sandbox Code Playgroud)

选择所有列都为 true 的位置:

df[results.all(axis=1)]

   A    B     dA     dB
1  2 -4.0  0.263  0.357
2  5  5.0  0.382  0.397
Run Code Online (Sandbox Code Playgroud)