You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame中按对数刻度将数值分箱到对应阶数?

高效实现Pandas DataFrame数值按10的对数刻度分箱到对应阶数

需求说明

需要将Pandas DataFrame中某列的数值,按10的幂次刻度分箱,映射到对应的阶数。结合预期结果,阶数与数值范围的对应逻辑为:

  • 阶数d对应:10^(d-1) ≤ x < 10^d(d≥0时)
  • 阶数d对应:10^d ≤ x < 10^(d+1)(d<0时)

给定示例数据集:

import pandas as pd
import numpy as np

df = pd.DataFrame(data={'number' : [0.478, 897.12, 12.56, 8.89, 1578.45, 0.089, 0.007]})

预期生成log_10_class列的结果:

numberlog_10_class
0.4780
897.123
12.562
8.891
1578.454
0.089-1
0.007-2

高效实现方法

利用NumPy的对数与取整函数,一行代码即可完成计算,效率远高于手动分箱:

# 计算log_10_class列
df['log_10_class'] = np.floor(np.log10(df['number'])) + 1

# 处理数值≤0的异常情况(可选,根据需求调整)
df.loc[df['number'] <= 0, 'log_10_class'] = np.nan

逻辑解释

  1. np.log10(df['number']):计算每个数值以10为底的对数值
  2. np.floor(...):对对数结果向下取整
  3. +1:将取整结果偏移1,得到符合预期的阶数
  4. 非正数处理:对数函数对非正数无意义,可根据业务需求标记为NaN或其他值

验证结果

运行代码后,df的输出与预期完全一致:

print(df)
# 输出:
#      number  log_10_class
# 0    0.478           0.0
# 1  897.120           3.0
# 2   12.560           2.0
# 3    8.890           1.0
# 4 1578.450           4.0
# 5    0.089          -1.0
# 6    0.007          -2.0

内容的提问来源于stack exchange,提问作者Maxime Oriol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 01:17:07