python - 无法在 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'
解决方案
将函数更改为:
def mape(data, act, fct):
act = data[act]
fct = data[fct]
return np.sum(abs((act - fct)/act))/len(act)
使用groupby.apply
时,组的数据作为第一个参数传递给函数。
推荐阅读
- php - laravel 获取下一个数据库请求的数据库数据
- swift - 如何在 Swift 中的特定索引处显示 collectionView
- c# - 如何在 Blazor WASM 客户端中访问 Httpclient 标头
- node.js - Nan 构建和循环数组
- macos - ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) on Mac Big Sur
- javascript - ANGULAR/IONIC ERROR 错误:尝试区分“[object Object]”时出错。只允许使用数组和可迭代对象
- html - 标题/导航 HTML CSS 之间的白线填充问题
- flutter - Flutter web Http post请求无法使用http包
- uwp - 后台任务 UWP 异常(“值不在预期范围内。”)
- c# - Entity Framework 5 将现有实体添加到嵌套集合