将计算列四舍五入为 1dp
Rounding calculated column to 1dp
我知道这是一个很受欢迎的查询,但我在这里找不到任何与我需要的完全匹配的内容。我在 table 中有一列将 36.25 四舍五入为 36.2 而不是 36.3。在这里广泛阅读了这方面的内容后,我很欣赏其中的细节,但这并不能帮助我解决问题。我怎样才能创建一些代码来按照我的意愿将我的 'Outcome' 列四舍五入?此代码生成我正在使用的 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'])
然后我尝试添加一个 'Outcome' 列:
Data['Outcome'] = Data['Numerator'] / Data['Denominator'] * 100
生成以下 table:
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
将 pandas 导入您的笔记本后,您可以添加此行,以便您的浮点值不会超过小数点后一位:
import pandas as pd
pd.options.display.float_format = '{:.1f}'.format
我知道这是一个很受欢迎的查询,但我在这里找不到任何与我需要的完全匹配的内容。我在 table 中有一列将 36.25 四舍五入为 36.2 而不是 36.3。在这里广泛阅读了这方面的内容后,我很欣赏其中的细节,但这并不能帮助我解决问题。我怎样才能创建一些代码来按照我的意愿将我的 'Outcome' 列四舍五入?此代码生成我正在使用的 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'])
然后我尝试添加一个 'Outcome' 列:
Data['Outcome'] = Data['Numerator'] / Data['Denominator'] * 100
生成以下 table:
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
将 pandas 导入您的笔记本后,您可以添加此行,以便您的浮点值不会超过小数点后一位:
import pandas as pd
pd.options.display.float_format = '{:.1f}'.format