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
相关产品推荐
相关产品推荐

