Использование пользовательской функции скоринга с pandas groupby для создания столбца в другом кадре данных - PullRequest
1 голос
/ 08 мая 2019

Это мой частичный 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.

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 ]

1 голос
/ 08 мая 2019

Вам необходимо применить функцию внутри объекта 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
0 голосов
/ 08 мая 2019

Использование apply с функцией lambda:

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
...