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

如何在Pandas中为每2秒间隔的时间列生成条件标记列?

解决方案

你的需求核心是判断time列向下取整后的值是否为2的倍数,同一取整点的所有行统一标记。用Pandas的向量化操作就能高效实现,不需要用apply(效率低且容易出错):

步骤1:构造示例数据

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'id': [1,2,3,4,5,6,7,8,9,10],
    'name': ['name1','name2','name3','name4','name5','name6','name7','name8','name9','name10'],
    'time': [260.123,261.323,261.342,261.567,262.123,262.345,264.876,265.234,266.234,267.234]
})

步骤2:新增time_delta列

直接通过向量化判断实现,无需自定义函数:

# 先对time列向下取整,再判断是否为2的倍数,映射为yes/no
df['time_delta'] = np.where(np.floor(df['time']).astype(int) % 2 == 0, 'yes', 'no')

执行后得到的结果完全符合你的期望:

id    name     time time_delta
0    1   name1  260.123        yes
1    2   name2  261.323         no
2    3   name3  261.342         no
3    4   name4  261.567         no
4    5   name5  262.123        yes
5    6   name6  262.345        yes
6    7   name7  264.876        yes
7    8   name8  265.234         no
8    9   name9  266.234        yes
9   10  name10  267.234         no

你之前代码的问题分析

  1. 变量作用域错误:自定义函数apply_test里的prev每次调用都会被重新赋值为当前num,无法在迭代之间保留上一次的值,逻辑完全不成立。
  2. 需求理解偏差:你的需求是判断取整后的值是否为2的倍数,而不是判断当前值是否比前一个值大2,原函数的逻辑从根本上不符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:40:42