Округление значений в столбце после агрегации - PullRequest
0 голосов
/ 24 сентября 2019

Я новичок в pandas и знаю, как форматировать значения столбцов в строки, чтобы округлять их и конвертировать в проценты.Но у меня возникают проблемы с этим в столбце, который я создал в результате использования метода agg():

debtors_by_purpose = data.groupby('purpose_id').agg({'debt': ['sum', 'count', 'mean']})
debtors_by_purpose['debt']['mean'] = debtors_by_purpose['debt']['mean'].apply('{:.2%}'.format)
debtors_by_purpose

Я подозреваю, что причина, по которой он не меняется, - это цепная индексация,но я не знаю другого способа доступа к элементам в столбце, созданном методом agg().Я не могу использовать loc[] здесь.А может быть, есть способ поместить метод format() в вызов agg()?Или, может быть, какой-то альтернативный метод округления значений был бы лучше здесь?

РЕДАКТИРОВАТЬ: просто чтобы быть ясно, проблема не в том, что выражение справа не работает.Это работает, и я полагаю, что я виноват в том, что не сделал более абстрактный пример.Проблема в том, что результат этого выражения не сохраняется в таблице через оператор присваивания , потому что я не знаю, как избежать цепной индексации в этом случае.Я мог бы также поставить ноль, чтобы проиллюстрировать, что этот ноль не сохраняется.

1 Ответ

1 голос
/ 24 сентября 2019

IN:

data = {'purpose_id': [1,1,2,2,3,3], 'debt':[50.2,100.80,50.5,200.54,50.02,150.55]}
df = pd.DataFrame(data)
group = df.groupby('purpose_id').agg({'debt': ['sum', 'count', 'mean']})

group['debt', 'mean'] = group['debt', 'mean'].map('{:.2%}'.format))

# OR

group.loc[:, ('debt', 'mean')] = group.loc[:, ('debt', 'mean')].map('{:.2%}'.format)

OUT:

        debt
    sum count   mean
purpose_id          
1   151.00  2   7550.00%
2   251.04  2   12552.00%
3   200.57  2   10028.50%
...