在python group by中,如何传入列来聚合函数参数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (116)

当我把几列传递给聚合函数时,我想了解如何在pandas中进行聚合。我习惯于在R中使用dplyr,这是非常简单的.

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

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

扫码关注云+社区

领取腾讯云代金券