汇总后将列中的值四舍五入

Rounding up values in the column after aggregation

我是 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() 调用中?或者,也许这里采用某种替代方法将值四舍五入会更好?

编辑:需要说明的是,问题不在于右边的表达式不起作用。它确实有效,我想这是我没有做一个更抽象的例子的错。问题是这个表达式 的结果没有通过赋值运算符 保存在 table 中,因为我不知道在这种情况下如何避免链式索引。我也可以把零放在那里来说明零没有被保存的观点。

输入:

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)

输出:

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