4

By default python uses Banker's rounding(round towards the nearest even for halfs), ie ( 10.5 becomes 10, 11.5 becomes 12). I want my halfs to be rounded towards the right always. (10.5 becomes 11, 11.5 becomes 12, 12.5 becomes 13, and of-course 10.2 becomes 10 and 10.7 becomes 11)

import pandas as pd 
import numpy as np

data = [['tom', 10.5], ['nick', 11.5], ['jack', 10.2], ['juli', 10.7]] 
df = pd.DataFrame(data, columns = ['Name', 'Age']) 
#df = df.round({'Age': 0}) 
df["Age"] = df["Age"].apply(np.round)

EXPECTED VALUES FOR COLUMN AGE IS: 11,12,10,11

soumya sharma
  • 73
  • 1
  • 1
  • 5
  • Answer here: https://stackoverflow.com/questions/33019698/how-to-properly-round-up-half-float-numbers-in-python – Toby Petty Nov 13 '19 at 14:13

1 Answers1

1

You can try this,

>>> import pandas as pd
>>> data = [['tom', 10.5], ['nick', 11.5], ['jack', 10.2], ['juli', 10.7]]
>>> df = pd.DataFrame(data, columns = ['Name', 'Age'])
>>> def round_school(x):
        i, f = divmod(x, 1)
        return int(i + ((f >= 0.5) if (x > 0) else (f > 0.5)))
>>> df['Age'] = df['Age'].apply(round_school)
>>> df
   Name  Age
0   tom   11
1  nick   12
2  jack   10
3  juli   11
E. Zeytinci
  • 2,642
  • 1
  • 20
  • 37