在给定特定条件下,我需要计算一些概率,因此我正在使用一个函数来获取包含给定值的行,例如:
df:
col1 col2 col3
A B C
H B C
A B
A H C
这是功能
def existence(x):
return df[df.isin([x]).any(1)]
所以,如果我这样做:
in:
existence('A')
out:
col1 col2 col3
A B C
A B
A H C
我需要对该函数进行泛化,以便可以给它提供多个参数并执行以下操作:
existence(x, y):
return df[df.isin([x]).any(1) & df.isin([y]).any(1)]
或广义
existence(x1, x2,..., xn):
return df[df.isin([x1]).any(1) & df.isin([x2]).any(1) & ... & df.isin([xn]).any(1)]
我认为args无法帮助我,因为我无法与运算符合并操作&
预先感谢您估算
答案 0 :(得分:8)
您的函数已经可以使用可变数量的参数。查看pd.DataFrame.isin
的描述:
DataFrame.isin(values)
DataFrame中的每个元素是否包含在值中。
这可以在多个参数上正常工作,您只需要更改将参数传递到函数中的方式即可。这就是*args
在Python中的用途。它允许您传递可变数量的参数,并给您返回tuple
。
我还更新了您的函数,以使用DataFrame来应用掩码,因为依赖于全局变量名不是一个好习惯。
def existence(df, *args):
return df[df.isin(args).any(1)]
In [13]: existence(df, 'A')
Out[13]:
col1 col2 col3
0 A B C
2 A B None
3 A H C
In [14]: existence(df, 'C', 'H')
Out[14]:
col1 col2 col3
0 A B C
1 H B C
3 A H C