Через несколько недель go мне предоставили действительно полезный кусок кода, чтобы помочь мне округлить результаты моих данных о здоровье до 1 dp, используя принцип округления с 1,25 до 1,3 (Python 3 этого не делает как стандарт). К сожалению, я встречал случай, когда мое новое правило округления не работает! Может кто-нибудь, пожалуйста, предложить поправку к my_round ниже, пожалуйста? Это так расстраивает, как я думал, что у меня есть идеальное решение здесь.
import pandas as pd
import math
raw_data = {'AreaCode' : ['101', '101', '101'],
'Disaggregation' : ['1864', '65Over', 'Total'],
'Numerator' : [19.0, 82.0, 101.0],
'Denominator' : [24.0, 160.0, 184.0]}
Data = pd.DataFrame(raw_data, columns = ['AreaCode', 'Disaggregation', 'Numerator', 'Denominator'])
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'] / (Data['Denominator'])*100).apply(my_round)
Когда все это запустится, вы можете увидеть, что результат 65Over округлился до 51,2, когда расчет составляет 82,0 / 160,0 * 100 = 51,250000. Я должен быть уверен, что в моих опубликованных данных такие экземпляры будут отображаться как 51,3.