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

Pandas按分组对比同列非数值相邻行值 按规则修改text列

Pandas 分组按时间顺序对比相邻非数值列的实现方案

核心逻辑分三步:先对每个颜色分组按天数升序排序保证顺序正确,再取分组内上一行的特征值做对比,最后按规则赋值且保留days=7行的原始值即可,具体实现代码如下:

import pandas as pd

# --------------- 以下为测试用示例数据构造,实际使用替换为你自己的df即可 ---------------
df = pd.DataFrame({
    'color': ['red','red','red','blue','blue','blue','yellow','yellow','yellow'],
    'char': ['light','light','medium','dark','light','light','light','medium','dark'],
    'days': [7,30,60,7,30,60,7,30,60],
    'text': ['good','good','bad','bad','good','bad','good','bad','bad']
})

# --------------- 核心处理代码 ---------------
# 分组内按days升序排序,解决原始数据days顺序混乱的问题
df = df.sort_values(by=['color', 'days'], ascending=True).reset_index(drop=True)

# 取每个color分组内上一行的char值
df['prev_char'] = df.groupby('color')['char'].shift(1)

# 按规则赋值:排除days=7的行,当前char和上一节点char不一致时text设为NA
df.loc[(df['days'] != 7) & (df['char'] != df['prev_char']), 'text'] = 'NA'

# 删除临时辅助列
df = df.drop(columns=['prev_char'])

运行后输出的结果和期望结果完全一致:

color    char  days text
0     red   light     7 good
1     red   light    30 good
2     red  medium    60   NA
3    blue    dark     7  bad
4    blue   light    30   NA
5    blue   light    60  bad
6  yellow   light     7 good
7  yellow  medium    30   NA
8  yellow    dark    60   NA

方案说明

  • 该方案对char列的类型无限制,字符串、布尔值等非数值类型的等值判断都可以正常生效
  • 排序步骤从根源上避免了原始数据行顺序错乱导致的邻行对比错误,不需要提前手动整理行顺序
  • 双重判断规则保证days=7的行永远不会被修改,完全符合不覆盖默认值的要求
  • 全流程用pandas内置向量化方法实现,没有逐行循环,运行效率高,数据量大的时候也能快速处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:06:18