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

如何为DataFrame中单调递增序列分组并添加分组列?

嘿,这个场景太常见了!用循环确实效率堪忧,尤其是数据量上去之后,咱们直接用Pandas的矢量化操作就能轻松搞定,速度快到飞起~

核心思路很简单:找到每一段递增序列的起始点(也就是当前x比前一个x小的位置),然后对这些起始点做累加,就能得到分组的y值了。

直接上代码:

import pandas as pd

# 先构造你的示例数据
df = pd.DataFrame({'x': [1,2,3,4,1,2,3,1,2,3,4,5,6,1,2]})

# 一步到位生成y列
df['y'] = (df['x'].diff() < 0).cumsum() + 1

# 看看结果
print(df)

运行后输出的结果完全符合你的需求:

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

我来拆解一下每一步的逻辑:

  • df['x'].diff():计算当前行x和前一行x的差值,第一行因为没有前一行,结果是NaN。
  • (df['x'].diff() < 0):判断差值是否小于0——如果是,说明当前x比前一个小,意味着新的递增序列开始了,标记为True;其他情况(包括第一行的NaN)标记为False。
  • .cumsum():对标记列做累加,每遇到一个True,累加值就加1,这样就得到了分组的基准序号(从0开始)。
  • +1:把基准序号加1,正好对应你需要的1、2、3、4分组编号。

这种方法完全是矢量化运算,避免了循环遍历,数据量越大,效率优势越明显,绝对比循环靠谱多了~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:38:53