从python字典到另一个函数的具有多个参数的函数的调用名称

时间:2019-05-07 20:33:54

标签: python

我正在尝试将python字典中的函数一个一个地调用到另一个函数中

feature={
1:[perm_entropy, 3, True],
2:[svd_entropy, 3, 1, True],
3:[petrosian_fd],
4:[katz_fd],
5:[higuchi_fd],
6:[hjorth_mobility],
7:[hjorth_complexity]}

我正在尝试如下调用上述函数

sub_25=[]
for i in feature.values():
    sub_25.append(sub25.groupby('trial')[col1].agg(i))

除前两个功能外,所有其他功能均正常运行。我认为这是因为它们具有额外的参数。 如果按以下顺序分别调用这两个函数,则它们会很好地工作

sub_25.append(sub25.groupby('trial')[col1].agg(perm_entropy, 3, True))

我该如何处理这两个功能? EEG data

2 个答案:

答案 0 :(得分:1)

您想要的是针对您的用例的部分应用功能。 Python的 functools 包可以解决这个问题。您可以按照以下示例更改代码:

from functools import partial

def addthree(a,b,c): 
    return a+b+c

partial_sum = partial(addthree,1,2)

fdict = {1: partial_sum}

fdict[1](4) // this returns 7 on the console

类似地,您可以使用必需的参数编写perm_entropy并传递 您以后的价值观

new_perm_entropy = partial(perm_entropy,3,True)
feature = {1: new_perm_entropy,..}
feature[1](your_args_here)

您可以阅读部分应用的功能以获取进一步的说明。

答案 1 :(得分:0)

从文档(https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.agg.html)开始,pandas agg方法接受一个函数作为第一个参数,第二个可选轴,然后接受位置参数,该参数将传递给指定的函数。

要在for循环中执行此操作,应使用*解压缩i,因为i是您需要传递给agg的参数列表。 / p>

sub_25=[]
for i in feature.values():
    sub_25.append(sub25.groupby('trial')[col1].agg(*i))

例如,假设i = [perm_entropy, 3, True],那么sub_25.append(sub25.groupby('trial')[col1].agg(*i))等同于您所追求的sub_25.append(sub25.groupby('trial')[col1].agg(perm_entropy, 3, True))