Панды удаляют столбец путем усреднения на основе других значений столбца - PullRequest
1 голос
/ 04 октября 2019

Вот модель типа данных, которые у меня есть:

    label1  label2  repetition     value
0        1       4           0  0.831011
1        1       9           0  0.698217
2        4       4           0  0.885272
3        4       9           0  0.009940
4        8       4           0  0.816476
5        8       9           0  0.069162
6        1       4           1  0.988980
7        1       9           1  0.892004
8        4       4           1  0.962106
9        4       9           1  0.367945
10       8       4           1  0.624772
11       8       9           1  0.694558

Это может быть сгенерировано следующим образом:

import random
import pandas as pd
data = []
for repe in [0,1]:
    for label1 in [1,4,8]:
        for label2 in [4,9]:
            value = random.random()
            data.append([label1, label2, repe, value])

data=pd.DataFrame(data, columns=['label1', 'label2', 'repetition', 'value'])

Я хотел бы создать новый DataFrame со столбцамиlabel1, label2 и value, где значение принимает среднее значение всех повторений. Это способ достижения этого:

data2 = data.groupby(['label1', 'label2'])['value'].mean().reset_index()

Однако в моем реальном случае у меня больше столбцов меток, поэтому я думаю, что код неясен, так как читатель должен сделать вывод, что отсутствующий столбец repetitionтот, который будет использоваться для среднего. Есть ли более простой способ?

1 Ответ

1 голос
/ 04 октября 2019

Я задал очень похожий вопрос здесь: Используйте ярлыки, по которым * не * группируйте в pandas groupby . Мои ярлыки были иерархическим индексом.

Ответ, который я получил, был

df.groupby(df.index.droplevel('repetition')).mean()

, что лучше, но все же не очень элегантно. Я обычно использую

df.groupby(df.columns.difference(['repetition']).mean()

, который, по крайней мере, передает цель.

Если вы найдете хороший способ для этого, дайте мне знать;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...