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

如何在DataFrame中基于前值大于当前值的条件递增生成序列?

解决DataFrame中当前值小于前值时递增序列的问题

嘿,这个需求我做时序数据处理时经常碰到,用Pandas实现起来简洁又高效!咱们直接上干货:

核心思路是先判断每一行的x值是否比上一行小,然后对这些“下降点”做累加,最后加上初始值1就能得到目标y列了。

步骤1:构造示例数据

先把你给出的示例数据转换成DataFrame,方便测试:

import pandas as pd

data = {'x': [1,2,3,4,5,6,1,2,3,4,5,6,7,8,1,2,5]}
df = pd.DataFrame(data)

步骤2:生成目标列y

一行代码就能搞定:

df['y'] = (df['x'].diff() < 0).cumsum() + 1

代码逻辑拆解

咱们把这行代码拆解开看,就明白为啥这么好用了:

  • df['x'].diff():计算每个x值与前一个x值的差值,第一行因为没有前序值,结果是NaN
  • (df['x'].diff() < 0):把差值小于0的位置标记为True(也就是当前x比前一个小的时候),其他位置为False,第一行的NaN会被自动当作False处理
  • .cumsum():对布尔序列做累加,True会被视为1,False视为0,这样每遇到一次x下降,累加值就加1
  • + 1:因为我们需要y从1开始,而初始累加值是0,加1正好得到起始值

验证结果

运行完代码后打印df,就能得到你想要的结果:

x  y
0   1  1
1   2  1
2   3  1
3   4  1
4   5  1
5   6  1
6   1  2
7   2  2
8   3  2
9   4  2
10  5  2
11  6  2
12  7  2
13  8  2
14  1  3
15  2  3
16  5  3

如果你的数据里有缺失值也不用担心,diff()和cumsum()会自动处理NaN,不会影响最终结果~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:08:20