You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中按行而非按列对小数进行取整?

实现Pandas按行自定义小数取整

刚好碰到过类似的需求!pandas自带的round()确实默认是按列统一设置小数位数,但要实现逐行自定义取整规则其实很简单,这里给你两种实用的方法,完美匹配你的需求:

先还原你的数据场景

首先我们先构造你给出的原始数据(单列DataFrame):

import pandas as pd

df = pd.DataFrame(
    {'A': [1010.00009, 54.45678, 0.50483]},
    index=['count', 'measure', 'average']
)

原始输出:

A
count    1010.00009
measure    54.45678
average     0.50483

方法1:用apply逐行匹配规则(直观易懂)

先定义好每行对应的小数取整规则,然后用apply遍历每一行,根据行索引匹配对应的规则:

# 定义每行的取整规则:键是行索引,值是保留的小数位数
round_rules = {
    'count': 0,      # 取整为整数
    'measure': 2,    # 保留2位小数
    'average': 4     # 保留4位小数
}

# 应用规则到A列
df['A'] = df.apply(lambda row: row['A'].round(round_rules[row.name]), axis=1)

# 如果想把count行转成纯整数类型(不是带.0的浮点数),可以再加一步
df.loc['count', 'A'] = df.loc['count', 'A'].astype(int)

方法2:用index.map关联规则(更高效简洁)

因为是单列数据,我们可以直接利用Series.round()支持传入对应位数序列的特性,通过索引映射规则来实现:

round_rules = {
    'count': 0,
    'measure': 2,
    'average': 4
}

# 用索引映射得到每行的取整位数,直接传入round()
df['A'] = df['A'].round(df.index.map(round_rules))

# 同样可选:把count行转成整数
df.loc['count', 'A'] = df.loc['count', 'A'].astype(int)

最终输出结果

两种方法都会得到你想要的格式:

A
count    1010
measure    54.46
average     0.5048

扩展说明

如果是多列的DataFrame需要按行设置不同的取整规则,你可以构造一个和原DataFrame形状完全一致的"位数矩阵",然后传入df.round()方法即可,原理是一样的。

内容的提问来源于stack exchange,提问作者eternity1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:11:45