对pandas groupby使用自定义评分功能在另一个数据框中创建一列

时间:2019-05-08 09:43:03

标签: pandas apply pandas-groupby

这是我的部分df =

dStart         y_test    y_pred
2018-01-01       1         2
2018-01-01       2         2
2018-01-02       3         3
2018-01-02       1         2
2018-01-02       2         3

我想在另一个数据框(df1)中创建一个具有每个唯一dStart的Mathews相关系数的列。

from sklearn.metrics import matthews_corrcoef

def mcc_func(y_test,y_pred):
            return matthews_corrcoef(df[y_test].values,df[y_pred].values)
df1['mcc']=df.groupby('dStart').apply(mcc_func('y_test','y_pred'))

此函数不起作用-我认为是因为该函数返回浮点数,并且“ apply”想要在groupby数据本身上使用该函数,但是我不知道如何提供正确的函数来应用

2 个答案:

答案 0 :(得分:1)

您需要在grouped对象中应用该功能-

g = df.groupby('dStart')
g.apply(lambda x: matthews_corrcoef(x['y_test'], x['y_pred']))

#OUTPUT
#dStart
#2018-01-01    0.0
#2018-01-02    0.0
#dtype: float64

答案 1 :(得分:0)

applylambda函数一起使用:

df = (df.groupby(['dStart']).apply(lambda x: matthews_corrcoef(x['y_test'], x['y_pred']))
        .reset_index(name='Matthews_corrcoef'))

print(df)
       dStart  Matthews_corrcoef
0  2018-01-01                0.0
1  2018-01-02                0.0