熊猫:按舍入浮点数组

Tom*_*ett 9 group-by pandas

我有一个带有浮点数列的数据帧.例如:

df = pd.DataFrame({'A' : np.random.randn(100), 'B': np.random.randn(100)})
Run Code Online (Sandbox Code Playgroud)

我想要做的是在将A列四舍五入到小数点后两位按A列分组.

我这样做的方式非常低效:

df.groupby(df.A.map(lambda x: "%.2f" % x))
Run Code Online (Sandbox Code Playgroud)

我特别不希望将所有内容转换为字符串,因为速度成为一个巨大的问题.但我觉得做以下事情并不安全:

df.groupby(np.around(df.A, 2))
Run Code Online (Sandbox Code Playgroud)

我不确定,但我觉得可能存在两个float64数字在舍入到2个小数位后具有相同字符串表示的情况,但是当np.around到2个小数位时可能会有略微不同的表示.例如,1.52的字符串表示是否有可能由np.around(.,2)表示为1.52000001,有时为1.51999999?

我的问题是什么是更好,更有效的方式.

xmd*_*han 6

我认为您不需要将float转换为string。

import pandas as pd
from random import random
df = pd.DataFrame({'A' : map(lambda x: random(), range(100000)), 'B': map(lambda x: random(), range(100000))})
df.groupby(df['A'].apply(lambda x: round(x, 1))).count()
Run Code Online (Sandbox Code Playgroud)