我是一名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__
答案 0 :(得分:1)
filter_by
怎么样?
df >> filter_by((X.a.isnull()) | (X.b.isnull()))
答案 1 :(得分:0)
编辑:将第二个条件调整为“ df.col2.notnull()”。不知道为什么管道后会忽略波浪号。
WindowsTokenRoleProvider