我正在尝试将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
答案 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))
。