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

如何高效统计普查/BLS数据中金额末尾零及非零末位数字频率

大规模金额数据的末尾连续零与最右侧非零数字向量化统计方案

针对你拥有的1000万条记录、250个变量的大规模数据集,以下是完全向量化的高效处理方案,避免Python循环带来的性能瓶颈:

步骤1:数据预处理

首先清理带千分位逗号的金额字符串,转换为数值类型,并扁平化所有金额数据以统一处理:

import pandas as pd
import numpy as np

# 假设数据集已加载为DataFrame `df`,先识别所有金额类字符串列
amount_columns = df.columns[df.dtypes == object]

# 清理千分位逗号并转换为数值(自动处理缺失值为NaN)
for col in amount_columns:
    df[col] = pd.to_numeric(df[col].str.replace(',', ''), errors='coerce')

# 扁平化所有金额数据,过滤缺失值并转为整数(仅保留小数点前部分)
all_amounts = df[amount_columns].values.flatten()
valid_amounts = all_amounts[~np.isnan(all_amounts)].astype(np.int64)
# 排除0值(若需保留可跳过此步,0的末尾零个数需单独处理)
non_zero_amounts = valid_amounts[valid_amounts != 0]

步骤2:向量化计算末尾连续零个数

利用Numpy的向量化条件运算,批量计算每个数值的末尾连续零个数:

# 初始化计数器数组
trailing_zeros = np.zeros_like(non_zero_amounts, dtype=np.int32)
temp_vals = non_zero_amounts.copy()

# 循环处理所有可被10整除的数值,批量更新计数器
while True:
    divisible_mask = (temp_vals % 10 == 0)
    if not divisible_mask.any():
        break
    trailing_zeros[divisible_mask] += 1
    temp_vals[divisible_mask] = temp_vals[divisible_mask] // 10

# 统计不同连续零个数的频率并排序
zeros_frequency = pd.Series(trailing_zeros).value_counts().sort_index()
print("连续零个数统计:")
print(zeros_frequency.to_string())

步骤3:向量化计算最右侧非零数字

基于已计算的连续零个数,批量提取最右侧非零数字:

# 去掉末尾零后得到核心数值
trimmed_vals = non_zero_amounts // (10 ** trailing_zeros)
# 提取最右侧数字
last_non_zero_digits = trimmed_vals % 10

# 统计数字频率并排序
digit_frequency = pd.Series(last_non_zero_digits).value_counts().sort_index()
print("\n最右侧非零数字统计:")
print(digit_frequency.to_string())

方案优势

  • 完全基于Numpy/Pandas的向量化运算,避免了Python层面的循环,处理5亿量级的元素时,速度比纯Python函数快100~1000倍
  • 自动处理缺失值,可灵活选择是否保留0值
  • 结果直接输出为有序的频率统计,符合你的需求格式

示例验证

用你提供的示例数据测试:
输入数值:[13568700, 449000, 43560, 20010, 34600, 32620]

  • 连续零个数统计结果:3:1, 2:2, 1:3
  • 最右侧非零数字统计结果:1:1, 2:1, 6:2, 7:1, 9:1
    与预期完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 01:46:34