如何在Pandas groupby中使用带多参数的tsfresh函数?
解决groupby.agg中带额外参数的tsfresh函数调用问题
当你在pandas的groupby.agg里使用需要额外参数的tsfresh函数(比如autocorrelation需要lag参数)时,直接传函数名会报错——因为agg只会把分组后的Series传给函数,不会自动处理额外参数。这里有几种实用的解决方法:
方法1:用lambda函数直接包装
把额外参数直接写在lambda里,让它变成只接受分组数据的单参数函数:
# 示例:计算lag=1的自相关 sample.groupby('id').agg([ 'std', 'benford_correlation', 'absolute_maximum', lambda x: autocorrelation(x, lag=1) ])
注意:lambda生成的列名会是<lambda>,如果需要更清晰的列名,推荐用下面的字典方式。
方法2:用functools.partial固定参数
通过partial把额外参数预先绑定到函数上,生成一个新的单参数函数,适合重复使用的场景:
from functools import partial # 固定lag=1,生成新函数 autocorr_lag1 = partial(autocorrelation, lag=1) # 固定lag=2,生成另一个函数 autocorr_lag2 = partial(autocorrelation, lag=2) # 在agg里直接用新函数 sample.groupby('id').agg([ 'std', 'benford_correlation', 'absolute_maximum', autocorr_lag1, autocorr_lag2 ])
方法3:用字典格式自定义列名和参数
这种方式最灵活,既能指定额外参数,又能给每个指标设置明确的列名,还能针对不同列设置不同聚合规则:
# 替换成你实际要计算的列名 agg_config = { 'target_column': [ 'std', 'benford_correlation', 'absolute_maximum', # 格式:(自定义列名, 带参数的函数) ('autocorr_lag1', lambda x: autocorrelation(x, lag=1)), ('autocorr_lag3', lambda x: autocorrelation(x, lag=3)) ] } result = sample.groupby('id').agg(agg_config)
核心逻辑就是:把需要多参数的函数,转换成只接受分组后Series的单参数函数,这样agg就能正确调用它了。
内容的提问来源于stack exchange,提问作者Luis Ramon Ramirez Rodriguez
相关产品推荐
相关产品推荐

