Я пытаюсь найти краткий способ агрегирования по нескольким столбцам в Pandas DataFrame
.
Вот пример, взятый из задачи классификации машинного обучения, где я хочу измерить точность прогнозы для каждого данного класса.
Входные данные
| | id | class_name | predicted | truth |
|---:|-----:|:-------------|------------:|--------:|
| 0 | 0 | dog | 0 | 1 |
| 1 | 1 | cat | 0 | 0 |
| 2 | 2 | dog | 0 | 1 |
| 3 | 3 | dog | 1 | 1 |
| 4 | 4 | cat | 1 | 0 |
Ожидаемый результат
| class_name | accuracy | std |
|:-------------|-----------:|---------:|
| cat | 0.5 | 0.707107 |
| dog | 0.333333 | 0.57735 |
Я уже могу сделать это довольно просто, объявив промежуточный столбец is_correct
, а затем использовать агрегацию
df["is_correct"] = df.predicted == df.truth
df.groupby("class_name").agg(accuracy=("is_correct", np.mean), std=("is_correct", np.std))
Я хотел бы решить эту проблему без предварительного объявления этого дополнительного столбца, но я не могу найти способ «агрегировать по нескольким столбцам».