用groupby计算数据帧中的多个指数曲线方程

时间:2018-02-09 19:02:04

标签: python python-3.x pandas scipy

我正在尝试创建一组指数曲线方程来解释价格和单位。在下面的说明性数据中,它将是每个地理 - 团队组合的一个等式(或一组系数)。我需要系数,所以我可以得到每个集的方程:y = A * K ^(Bx)。

来自csv的说明性数据(实际上,有几十个地理和团队,每个都有50到100个数据点,因此希望避免一次做一个)。波士顿凯尔特人队将有自己的等式或系数,波士顿爱国者队自己,芝加哥公牛队自己的等等:

Geography  Team  Price  Tickets
Boston  Celtics  100  800
Boston  Celtics  95  810
Boston  Celtics  90  870
Boston  Celtics  80  1010
Boston  Patriots  117  500
Boston  Patriots  123  520
Boston  Patriots  110  550
Boston  Patriots  102  605
Boston  Patriots  97  630
Chicago  Bulls  82  200
Chicago  Bulls  80  205
Chicago  Bulls  70  206
Chicago  Bulls  68  215
Chicago  Bulls  62  228
Chicago  Bears  95  305
Chicago  Bears  91  311
Chicago  Bears  89  317
Chicago  Bears  81  320
Chicago  Bears  82  322
Chicago  Bears  70  340

这是我的代码:

import pandas as pd
import numpy as np
import scipy

data = pd.read_csv(r'C:\PyCharm\Scripts\teams.csv')

data = data.groupby(['Geography','Team']).apply(scipy.optimize.curve_fit(lambda t,a,b: a*np.exp(b*t), data['Price'], data['Tickets'], p0=(5000, -0.3)))

data.to_csv(r'C:\PyCharm\Scripts\Coefs.csv')

尝试运行时,收到以下错误消息:

TypeError:不可用类型:'numpy.ndarray'

1 个答案:

答案 0 :(得分:1)

IIUC

from scipy.optimize import curve_fit
data = data.groupby(['Geography','Team']).apply(lambda x : curve_fit(lambda t,a,b: a*np.exp(b*t), x['Price'], x['Tickets'], p0=(5000, -0.3)))