【发布时间】:2019-09-23 21:44:35
【问题描述】:
我是 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() 调用中?或者,也许其他一些四舍五入的方法在这里会更好?
编辑:为了清楚起见,问题不在于右边的表达式不起作用。它确实有效,我想我没有做一个更抽象的例子是我的错。问题是这个表达式的结果没有通过赋值运算符保存在表中,因为我不知道在这种情况下如何避免链式索引。我也可以把零放在那里来说明零没有被保存。
【问题讨论】:
-
改成apply to map是否有效
.map('{:.2%}'.format) -
@MichaelGardner 不,它没有。如果我只是把它作为一个没有赋值的表达式,那么两个版本都可以工作。但是对于分配,两个版本都不会影响原始版本。我很确定链式索引是罪魁祸首。
标签: python pandas aggregate rounding