【发布时间】:2016-04-13 13:03:39
【问题描述】:
我有一个带有一列浮点数的数据框。例如:
df = pd.DataFrame({'A' : np.random.randn(100), 'B': np.random.randn(100)})
我想要做的是在将 A 列四舍五入到小数点后 2 位后按 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?
我的问题是什么是更好和更有效的方法。
【问题讨论】:
-
您可以将列
A乘以100 并转换为整数吗?喜欢df.groupby(pd.Series(np.int64(df.A * 100)))?然后只需除以 100.0 即可得到原始值。 -
我想我可以,但这绝不方便。