Python dfply:无法在多个条件下屏蔽

时间:2018-06-19 10:45:42

标签: python logical-operators dfply

我是一名R用户,学习如何使用Python的dfply,Python相当于R的dplyr。我的问题:在dfply中,我无法屏蔽管道中的多个条件。我寻求一个涉及dfply管道而不是多行子集的解决方案。

我的代码:

# Import
import pandas as pd
import numpy as np
from dfply import *

# Create data frame and mask it
df  = pd.DataFrame({'a':[np.nan,2,3,4,5],'b':[6,7,8,9,np.nan],'c':[5,4,3,2,1]})
df2 = (df >>
        mask((X.a.isnull()) | ~(X.b.isnull())))
print(df)
print(df2)

这是oringal数据框,df:

       a    b    c
    0  NaN  6.0  5
    1  2.0  7.0  4
    2  3.0  8.0  3
    3  4.0  9.0  2
    4  5.0  NaN  1

这是管道掩码的结果,df2:

         a    b    c
      0  NaN  6.0  5
      4  5.0  NaN  1

但是,我希望这样做:

         a    b    c
      0  NaN  6.0  5
      1  2.0  7.0  4
      2  3.0  8.0  3
      3  4.0  9.0  2

为什么不“|”和“〜”运算符会产生一行,其中“a”列 NaN或列“b” NaN?

顺便说一句,我也试过np.logical_or()

df  = pd.DataFrame({'a':[np.nan,2,3,4,5],'b':[6,7,8,9,np.nan],'c':[5,4,3,2,1]})
df2 = (df >>
        mask(np.logical_or(X.a.isnull(),~X.b.isnull())))
print(df)
print(df2)

但这导致了错误:

mask(np.logical_or(X.a.isnull(),~X.b.isnull())))
ValueError: invalid __array_struct__

2 个答案:

答案 0 :(得分:1)

filter_by 怎么样?

df >> filter_by((X.a.isnull()) | (X.b.isnull()))

答案 1 :(得分:0)

编辑:将第二个条件调整为“ df.col2.notnull()”。不知道为什么管道后会忽略波浪号。

WindowsTokenRoleProvider