如何在 Pandas 中使用向量对矩阵执行布尔 AND?

How to perform boolean AND on matrix using vector in Pandas?

提问人:PWolf 提问时间:8/17/2021 更新时间:8/17/2021 访问量:120

问:

我想使用向量对矩阵执行布尔 AND 运算。例如,给定:

matrix = pd.DataFrame([[True, False], [True, False], [True, False]], columns=["A", "B"])
vector = pd.Series([False, False, False])

结果将是逐列布尔 AND,如下所示:

result = pd.DataFrame([[False, False], [False, False], [False, False]], columns=["A", "B"])

我能够使用循环实现这一点,但我想知道 - 有没有更优雅的方法可以做到这一点?

熊猫

评论


答:

0赞 Vivek Kalyanarangan 8/17/2021 #1

用-

matrix.apply(lambda x: x & vector)

输出

       A      B
0  False  False
1  False  False
2  False  False

这里暗示该函数的参数是用于按列应用的。axisapply0

1赞 ALollz 8/17/2021 #2

我会下拉到这样,你可以避免循环并在正确的轴上广播。然后重建 DataFramenumpy

import pandas as pd

pd.DataFrame(matrix.to_numpy() & vector.to_numpy()[:, None],
             columns=matrix.columns,
             index=matrix.index)

       A      B
0  False  False
1  False  False
2  False  False

或者,您可以使用 DataFrame,允许进行简单的比较,然后返回结果。对于大型 DataFrame,这可能会变慢transpose&transpose

(matrix.T & vector).T

评论

0赞 PWolf 8/18/2021
谢谢。我接受了另一个答案,但这个答案包含有用的附加信息。
0赞 ALollz 8/18/2021
@PWolf是的,不用担心,我认为另一种解决方案更直接:D。与往常一样,您仍然可以对任何您认为有用的答案投赞成票