如何对groupby处理后的DataFrame应用{:.3f}格式且保留原High列值?
解决方案:直接修改原DataFrame即可,无需新建
你完全不需要新建DataFrame,直接在已有的hg上操作就能实现需求——保持High列数值不变,把其他数值列格式化为三位小数。下面给你两种常用的实现方式:
方式一:直接修改现有列(覆盖原数据)
如果不担心覆盖原始数值,可以直接对counts和Total列做格式化处理:
# 对counts列格式化为三位小数(转为字符串格式) hg['counts'] = hg['counts'].apply(lambda x: "{:.3f}".format(x)) # 对Total列格式化为三位小数(转为字符串格式) hg['Total'] = hg['Total'].apply(lambda x: "{:.3f}".format(x))
如果你希望保持数值类型(而非转为字符串),可以用round()方法实现四舍五入到三位小数:
hg['counts'] = hg['counts'].round(3) hg['Total'] = hg['Total'].round(3)
这两种方式都不会改动High列的数值,完全符合你的要求。
方式二:添加新列(保留原数据)
如果想保留原始数值列,只新增格式化后的列,可以这样做:
# 添加格式化后的新列 hg['New_counts'] = hg['counts'].apply(lambda x: "{:.3f}".format(x)) hg['New_Total'] = hg['Total'].apply(lambda x: "{:.3f}".format(x))
处理后的DataFrame会变成类似你预期的样子:
| High | counts | Total | New_counts | New_Total |
|---|---|---|---|---|
| 11 | 1.2492 | 2.4984 | 1.249 | 2.498 |
| 1 | 1.2466 | 2.4932 | 1.247 | 2.493 |
| 20 | 1.2574 | 1.2574 | 1.257 | 1.257 |
| 19 | 1.2547 | 1.2547 | 1.255 | 1.255 |
| 18 | 1.2523 | 1.2523 | 1.252 | 1.252 |
额外提示:保留原始数据的安全操作
如果担心误改原数据,可以先复制一份hg再操作:
hg_safe = hg.copy() # 然后在hg_safe上执行上述格式化代码
内容的提问来源于stack exchange,提问作者Don Coder
相关产品推荐
相关产品推荐

