Python 如何在DataFrame和Series之间进行逻辑操作?
假设我有一个具有相同索引的boolPython 如何在DataFrame和Series之间进行逻辑操作?,python,pandas,dataframe,boolean,logical-operators,Python,Pandas,Dataframe,Boolean,Logical Operators,假设我有一个具有相同索引的boolDataFrame df和一个boolSeries x,我想在每个列的df和x之间进行逻辑运算。与使用数据帧相比,是否有像数据帧.sub这样的快捷方法 In [31]: df Out[31]: x y z u A False False True True B True True True True C True False False False In [32]: x Out
DataFrame df
和一个boolSeries x
,我想在每个列的df
和x
之间进行逻辑运算。与使用数据帧相比,是否有像数据帧.sub这样的快捷方法
In [31]: df
Out[31]:
x y z u
A False False True True
B True True True True
C True False False False
In [32]: x
Out[32]:
A True
B False
C True
dtype: bool
In [33]: r = df.apply(lambda col: col & x) # Any other way ??
In [34]: r
Out[34]:
x y z u
A False False True True
B False False False False
C True False False False
使用,但需要转换为int
,然后转换为bool
,因为UserWarning
:
print (df.astype(int).mul(x.values, axis=0).astype(bool))
x y z u
A False False True True
B False False False False
C True False False False
类似的解决方案:
print (df.mul(x.astype(int), axis=0).astype(bool))
x y z u
A False False True True
B False False False False
C True False False False
C:\Anaconda3\lib\site packages\pandas\computation\expressions.py:181:UserWarning:在Python空间中求值,因为numexpr不支持bool数据类型的“*”运算符,请改用“&” 不支持的[op_str])) 另一个
numpy
解决方案具有:
print (df.mul(x.values, axis=0))
x y z u
A False False True True
B False False False False
C True False False False
print (pd.DataFrame(np.logical_and(df.values, x.values[:, None]),
index=df.index,
columns=df.columns))
x y z u
A False False True True
B False False False False
C True False False False