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

Python中while循环给Pandas DataFrame赋值全为最后一行值的问题解决

Pandas数值位数计算及列赋值问题解决方案

需求说明

需要实现数值规则计算,结果用于后续if逻辑判断:

  • 若数值≥1,返回结果为0
  • 若数值<1,返回小数点后连续0的个数(例:0.123返回3,0.00123返回5)
    现有示例DataFrame包含Ticker、Level、Signal三列,需新增Digit列存储上述计算结果。

原始实现问题

最初编写的while循环可正确计算单条数据的digit值,但执行df['Digits'] = digit赋值时,整列都会被覆盖为最后一行的计算结果,无法输出逐行的正确值。

核心原因:Pandas中对整列直接赋值单个变量时,会触发广播机制将该值填充到列的所有行。循环中每次赋值都会覆盖全列数据,最终仅保留最后一次循环的计算值。

最终实现代码

放弃while循环,改用apply逐行处理结合正则匹配实现需求,多轮调整后已符合预期:

import re
# 需提前导入正则模块re
df['Digits'] = (df['MACD Level (12, 26)']/1000).apply(lambda x: len(re.search('\d+\.(0*)', str("{:.9f}".format(x))).group(1)))

代码逻辑说明:先将MACD Level字段值除以1000,再格式化为保留9位小数的字符串,通过正则匹配提取小数点后的连续0序列,统计序列长度即为Digits值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 23:12:02