在python中泛化一个函数

时间:2019-05-16 20:18:36

标签: python pandas

在给定特定条件下,我需要计算一些概率,因此我正在使用一个函数来获取包含给定值的行,例如:

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无法帮助我,因为我无法与运算符合并操作&

预先感谢您估算

1 个答案:

答案 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