gpt4 book ai didi

python - 将计算列舍入为 1dp

转载 作者:行者123 更新时间:2023-12-01 06:29:55 24 4
gpt4 key购买 nike

我意识到这是一个受欢迎的查询,但我在这里没有找到任何与我需要的内容完全匹配的内容。我在表中有一列将 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。我需要将此列设置为 1dp,显示为 36.3,但是如何在 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

最佳答案

我对你的函数做了一些调整,它现在似乎可以工作了:)

def my_round(n, ndigits=1):
try:
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)
val = part/(10 ** ndigits)
except ValueError:
val = np.nan
return val

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

关于python - 将计算列舍入为 1dp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59955319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com