假设我有一个NxM boolean dataframe X和一个Nx1 boolean dataframe Y,我想对返回一个新数据帧NxM的每一列执行一个布尔操作。例如:

x = pd.DataFrame([[True, True, True], [True, False, True], [False, False, True]])
y = pd.DataFrame([[False], [True], [True]])

我希望x&y返回:
       0    1   2
0     False False False
1     True  False True
2     False False True

但它却反过来:
    0   1   2
0   False   NaN NaN
1   True    NaN NaN
2   False   NaN NaN

而是把y当作
x和y[0]
给予:
    0   1   2
0   False   True    True
1   False   False   True
2   False   False   True

似乎是排着队广播的。有没有一种正确的方法可以做到这一点,而不是将操作应用于序列而不是不转换?
(x.T & y[0]).T


    0   1   2
0   False   False   False
1   True    False   True
2   False   False   True

当行索引与列标签不同时,这似乎会失败

最佳答案

可以调用apply并传递lambda和调用squeeze将序列展平为一维数组:

In [152]:
x.apply(lambda s: s & y.squeeze())

Out[152]:
       0      1      2
0  False  False  False
1   True  False   True
2  False  False   True

我不确定这是否更快,这里我们通过调用df上的apply来应用mask列,这就是为什么不需要转置的原因
实际上,您可以使用np.logical_and
In [156]:
np.logical_and(x,y)

Out[156]:
       0      1      2
0  False  False  False
1   True  False   True
2  False  False   True

10-06 13:56
查看更多