首页 > 解决方案 > 无法在 Python 中对具有两个参数的函数进行分组应用

问题描述

我的问题与有关。我有一个 Pandas DataFrame,如下所示。我想在分组后计算 MAPE period。但是,我在尝试这样做时遇到错误。我究竟做错了什么?

# Create DataFrame
df = pd.DataFrame({
    'date': ['2021-01-01', '2021-01-01', '2021-01-02', '2021-01-02', '2021-01-02'],
    'period': [1, 2, 1, 2, 3],
    'actuals': [50, 43, 42, 51, 49],
    'forecast': [49, 48, 50, 39, 51]
})

# Define MAPE
def mape(act, fct):
    return np.sum(abs((act - fct)/act))/len(act)

# Try to calculate MAPE for each period (this fails)
df.groupby('period').apply(mape, act='actuals', fct='forecast')
TypeError: mape() got multiple values for argument 'act'

标签: pythonpandasfunction

解决方案


将函数更改为:

def mape(data, act, fct):
    act = data[act]
    fct = data[fct]
    return np.sum(abs((act - fct)/act))/len(act)

使用groupby.apply时,组的数据作为第一个参数传递给函数。


推荐阅读