当我将几列传递给聚合函数时,我正在寻找对如何在熊猫中进行聚合的理解。我习惯在R中使用dplyr,因为这非常简单...

在我的示例中,“数据”有许多列,包括“ TPR”,“ FPR”和“模型”。有许多不同的数据集连接在一起,我需要在“模型”分组级别上运行函数。

grouped_data = data.groupby(['model'])
grouped_data.aggregate( sklearn.metrics.auc(x='FPR',y='TPR') )


但是,这会导致错误。

最佳答案

因为只想应用一个方法,所以可以使用apply代替aggregate。该参数必须是可调用的Python才能应用于每个组,因此在您的情况下,

data.groupby('model').apply(lambda group: sklearn.metrics.auc(group.FPR, group.TPR))


例如:

y = np.array([1, 1, 2, 2])
pred = np.array([0.1, 0.4, 0.35, 0.8])
fpr, tpr, _ = sklearn.metrics.roc_curve(y, pred, pos_label=2)
df_a = pd.DataFrame({'model': 'a', 'FPR': fpr, 'TPR': tpr})
df_b = pd.DataFrame({'model': 'b', 'FPR': fpr, 'TPR': tpr})
data = df_a.append(df_b)
data.groupby('model').apply(lambda group: sklearn.metrics.auc(group.FPR, group.TPR))


输出:

model
a    0.75
b    0.75
dtype: float64

10-07 15:15