我有一个包含浮点数列的数据框。例如:
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?
我的问题是什么是更好,更有效的方式。
答案 0 :(得分:4)
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()