Eas*_*sun 2 python boolean logical-operators dataframe pandas
假设我有一个布尔值DataFrame df和一个Series x具有相同索引的布尔值,并且我想在每列之间df和之间进行逻辑运算x。有没有像DataFrame.sub使用比较短而快速的方法DataFrame.apply?
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
Run Code Online (Sandbox Code Playgroud)
使用mul,但需要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
Run Code Online (Sandbox Code Playgroud)
类似的解决方案:
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
C:\ Anaconda3 \ lib \ site-packages \ pandas \ computation \ expressions.py:181:UserWarning:在python空间中进行评估,因为numexpr不支持bool dtype使用'*'运算符,请使用'&'而不支持[ op_str]))
另一个numpy解决方案np.logical_and:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1078 次 |
| 最近记录: |