熊猫:按舍入浮点数组

时间:2016-01-08 18:44:52

标签: pandas group-by

我有一个包含浮点数列的数据框。例如:

df = pd.DataFrame({'A' : np.random.randn(100), 'B': np.random.randn(100)})

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

我这样做非常低效:

df.groupby(df.A.map(lambda x: "%.2f" % x))

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

df.groupby(np.around(df.A, 2))

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

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

1 个答案:

答案 0 :(得分:4)

我认为您不需要将float转换为字符串。

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()