在pandas中使用apply()应用函数

时间:2019-07-14 09:11:12

标签: pandas apply pandas-groupby

我正在尝试查找数据点到回归线的距离。 为此,正如另一个问题所建议的那样,我已经编写了该函数。但是,当我尝试应用它时,我不会成功。 原因是该功能需要在groupby之后应用 功能如下

    def regress(yvar, xvar):
       X = xvar.values[:,np.newaxis]
       Y = yvar.values
       model=LinearRegression()
       model.fit(X,Y)
       dist = Y - model.predict(X)
    return dist

我正试图在groupby之后应用它,如下所示 我数据框的名称是“ data_train_bel1800”,“时间”和“值”是包含需要馈入函数的值的列

    data_train_bel1800['distance'] = (data_train_bel1800.groupby(['Cycle','Type']).apply(regress(data_train_bel1800['Time'].values,data_train_bel1800['Values'].values)))

当我将时间和值列的值传递给他时,我做错了。谁能指导?

1 个答案:

答案 0 :(得分:1)

def regress(yvar, xvar):
    X = xvar.values[:,np.newaxis]
    Y = yvar
    model=LinearRegression()
    res = model.fit(X,Y)
    dist = Y - res.predict(X)
    return dist

test = pd.read_csv('Training.csv')
test.drop(['EndTime'],axis=1,inplace=True)

res= test.groupby(['Cycle','Type'],as_index=False).apply(lambda x: regress(x["Time"], x['Values']))
test["distance"] = res.reset_index(level=0, drop=True)

print(test)
 Cycle Type Time    Values  distance
0   2   2   101.0   20.402  426.813637
1   2   2   102.0   20.402  427.813637
2   2   2   103.0   20.402  428.813637
3   2   2   104.0   20.402  429.813637