[英]How to do logical operation between DataFrame and Series?
假設我有一個bool DataFrame df
和一個bool Series x
具有相同的索引,並且我想在df
和x
每列之間進行邏輯運算。 與使用DataFrame.apply
相比,有沒有像DataFrame.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
使用mul
,但是需要UserWarning
為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
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
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.