熊猫使用两个(或多个值)分组聚合

时间:2020-09-28 16:54:12

标签: python pandas

我想知道是否有一种漂亮的方法可以进行以下操作

我有一个country, user_id, actual_value, prediction列的pandas df

我想计算每个国家/地区的准确性。精度方法需要两个数组。一种是实际值,另一种是pred

import pandas as pd
from sklearn.metrics import balanced_accuracy_score


df = pd.DataFrame(
    [
        ('DEU', 'a', 1, 1),
        ('DEU', 'b', 1, 0),
        ('GBR', 'c', 0, 0),
        ('GBR', 'c', 0, 1),
    ],
    columns=['country', 'user_id', 'actual_value', 'prediction']
)

我知道我可以迭代地选择所需的df切片并计算指标。我想知道是否可以将两个值(actualsprediction)馈入聚合函数。

我猜想,有点违反熊猫公约,我可以创建一个在元组中包含两个值的列。像

df['actuals_predictions'] = df[['actual_value', 'prediction']].apply(lambda row: tuple(row), axis=1)

然后为我的精度函数创建包装器,该包装器将首先从元组中提取数组并调用指标

def acc_wrapper(actuals_predictions):
    actuals = [a for a, _ in actuals_predictions]
    predictions = [p for _, p in actuals_predictions]

    return balanced_accuracy_score(actuals, predictions)

然后做类似的事情

df.groupby('country').actuals_predictions.agg(acc_wrapper)

country
DEU    0.5
GBR    0.5
Name: e, dtype: float64

但是我想知道是否还有更经典的方法。

1 个答案:

答案 0 :(得分:2)

我们可能只是将$user = User::create([ 'name' => $request['name'], 'phone' => $request['phone'], 'email' => $request['email'], 'password' => Hash::make($request['password']), ]); 这个函数传递给balanced_accuracy_score

apply