假设我有一个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