代码之家  ›  专栏  ›  技术社区  ›  runningbirds

python group by,传入列以聚合函数参数

  •  0
  • runningbirds  · 技术社区  · 6 年前

    我在寻找当我将几个列传递给聚合函数时如何在pandas中进行聚合的理解。我已经习惯了在R中使用DPLYR,这是非常简单的…

    在我的示例中,“data”有许多列,包括“tpr”、“fpr”和“model”。有许多不同的数据集连接在一起,我需要在“model”分组级别运行我的函数。

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

    但是,这会导致错误。

    1 回复  |  直到 6 年前
        1
  •  2
  •   fuglede    6 年前

    因为您只想应用一个方法,所以可以使用 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