簡體   English   中英

如何在DataFrame和Series之間進行邏輯運算?

[英]How to do logical operation between DataFrame and Series?

假設我有一個bool DataFrame df和一個bool Series x具有相同的索引,並且我想在dfx每列之間進行邏輯運算。 與使用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 ,但是需要UserWarningint然后轉換為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM