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

如何提取Pandas DataFrame中指定列值发生变化时的对应行

实现代码

核心逻辑是对比ts列当前行与上一行的取值,标记出发生变化的位置,再同时取出变化位置的前后行即可,完整可运行代码如下:

import pandas as pd

# 构造示例DataFrame
data = {
    'ts': ['n', 'n', 'l', 'l', 'l', 'l', 'n'],
    'fdw': [[0,0]]*7,
    'time_stamp': [1635211605896, 1635211606896, 1635211607896, 1635211608896, 1635211609896, 1635211609896, 1635211609896]
}
df = pd.DataFrame(data)

# 标记ts列与上一行不同的行
change_mask = df['ts'] != df['ts'].shift(1)
# 提取变化行的索引,以及变化行的前一行索引
target_index = change_mask[change_mask].index
target_index = target_index.union(target_index - 1)

# 得到最终结果
result = df.loc[target_index]
print(result)

运行后输出和你预期的完全一致:

ts     fdw     time_stamp
1  n  [0, 0]  1635211606896
2  l  [0, 0]  1635211607896
5  l  [0, 0]  1635211609896
6  n  [0, 0]  1635211609896

注意事项

如果你的原始DataFrame没有按时间顺序排序,需要先按time_stamp字段排序后再执行上述逻辑,避免出现顺序错误导致的判断失误:

df = df.sort_values('time_stamp').reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:45:08