数字系列有一个很好的舍入方法,可以舍入为10的幂,例如
>>> pd.Series([11,16,21]).round(-1)
0 10
1 20
2 20
dtype: int64
是否有一个相当不错的语法用于舍入到最接近的5(或其他10的非幂)?我有点希望round
可以取非整数值吗?
答案 0 :(得分:11)
您可以使用自定义舍入功能并将apply
添加到系列中。
import pandas as pd
def custom_round(x, base=5):
return int(base * round(float(x)/base))
df = pd.Series([11,16,21]).apply(lambda x: custom_round(x, base=5))
现在您只需调整base
即可获得所需的最接近的值。
几个例子:
0 10
1 15
2 20
dtype: int64
0 14
1 14
2 21
dtype: int64
0 12
1 15
2 21
dtype: int64
您也可以完成非整数值的目标。
def custom_round(x, base=5):
return base * round(float(x)/base)
df = pd.Series([11.35,16.91,21.12]).apply(lambda x: custom_round(x, base=.05))
通过舍入到最接近的0.05,您将得到这些结果(注意我在本例中略微修改了您的系列):
0 11.35
1 16.90
2 21.10
dtype: float64
如果您保留原始系列整数,则此apply
会将您的系列更改为float
值:
答案 1 :(得分:0)
我想我可以这样做:
def round_down_to_nearest(self, n):
return (self // n) * n
pd.Series.round_down_to_nearest = round_down_to_nearest