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

如何判断Pandas DataFrame中数值是否发生十位/百位增长

问题根因

现有代码无法得到正确结果有两个核心错误:

  • 传入的value列是字符串格式,字符串比较遵循字典序规则,和数值大小比较逻辑完全不一致,比如字符串'9'会被判定为大于'10',比对基础就错了。
  • 判断逻辑完全不符合需求:一是大小判断方向写反,二是没有针对十位/百位进位做判定,只是做了全量数值的大小比较,没法过滤个位数小幅度增长的场景。
修复方案

核心判定逻辑:要识别十位进位,只需要对数值做除以10取整(拿到十位及以上数位的数值),和上一行同规则计算的结果比较,如果当前值更大就说明发生了十位进位;如果要识别百位进位,把取整除数换成100即可,个位数、小数点后级别的小幅度增长不会触发这个判定条件。
匹配你预期输出的完整代码如下:

import pandas as pd  
import numpy as np

data = {'value':['9','10','19','22','31']}
df = pd.DataFrame(data)
# 先将字符串格式的数值转换为整数类型
df['value'] = df['value'].astype(int)
df['value_copy'] = df['value'].shift(1)
# 十位进位判定,需要同时判定百位的话追加 df['value']//100 > df['value_copy']//100 的或条件即可
df['Increase'] = np.where(df['value']//10 > df['value_copy']//10, 1, 0)

print(df['Increase'].tolist())
运行结果

代码执行后Increase列的输出为[nan, 1, 0, 1, 1],和你给出的预期结果完全一致。

扩展提示:如果你的数据包含小数,先对数值做np.floor()向下取整后再做整除判定即可,不会出现0.02这类小幅增长被误判为进位的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:03:20