将计算列四舍五入至1dp

问题描述 投票:1回答:2

我意识到这是一个受欢迎的查询,但是我在这里没有发现任何与我需要的东西完全匹配的东西。我在表中的一列将36.25舍入为36.2,而不是36.3。在这里已经广泛阅读了有关内容,我很欣赏细节,但是这并不能帮助我解决问题。我如何根据需要创建一些代码来整理“结果”列?这段代码产生了我正在使用的df版本:

import pandas as pd
import numpy as np

raw_data = {'AreaCode' : ['101', '102', '103', '104'],
            'Numerator' : [300, 500, 600, 667],
            'Denominator' : [1000, 780, 1100, 1840]}
Data = pd.DataFrame(raw_data, columns = ['AreaCode', 'Numerator', 'Denominator'])

然后我尝试添加“结果”列:

Data['Outcome'] = Data['Numerator'] / Data['Denominator'] * 100

下面产生表:

AreaCode|Numerator|Denominator|Outcome
101|300|1000|30.000000 
102|500|780|64.102564 
103|600|1100|54.545455
104|667|1840|36.25000

除了我将Data = Data.round(1)应用于此之外,它都将36.250000舍入为36.2。我需要将此列显示为36.3的1dp,但如何在Python中进行编码。有关如何执行此操作的示例使用的是一次性输入的用户输入的字符串,而不是整个df.column。它不会让我将df.column传递给这些。我尝试了一个无效的示例:

import math
def my_round(n, ndigits):
    part = n * 10 ** ndigits
    delta = part - int(part)
    # always round "away from 0"
    if delta >= 0.5 or -0.5 < delta <= 0:
        part = math.ceil(part)
    else:
        part = math.floor(part)
    return part / (10 ** ndigits
python pandas rounding
2个回答
0
投票

我对您的功能进行了一些调整,现在看来可以使用:)

def my_round(n, ndigits=1):
    part = n * 10 ** ndigits
    delta = part - int(part)
    # always round "away from 0"
    if delta >= 0.5 or -0.5 < delta <= 0:
        part = math.ceil(part)
    else:
        part = math.floor(part)
    return part/(10 ** ndigits)
Data['Outcome'] = (Data['Numerator'].divide(Data['Denominator'])*100).apply(my_round)
print(Data)

输出:

  AreaCode  Numerator  Denominator  Outcome
0      101        300         1000     30.0
1      102        500          780     64.1
2      103        600         1100     54.5
3      104        667         1840     36.3

0
投票

将熊猫导入笔记本后,您可以添加此行,以使浮点值不超过小数点后一位:

import pandas as pd
pd.options.display.float_format = '{:.1f}'.format
© www.soinside.com 2019 - 2024. All rights reserved.