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

如何用Pandas按keyword与id组合判断rank的正向趋势?

按Keyword+ID组合判断Rank趋势的解决方案

处理步骤

  1. 统一日期格式:将date列转为可排序的datetime类型,避免因格式混乱导致时间排序错误。
  2. 分组并按时间排序:按keyword和id组合分组,每组内按日期升序排列,确保数据按时间顺序梳理。
  3. 判定趋势方向:对比每组内最早和最晚记录的rank值,确定趋势:
    • 最终rank > 初始rank:标记为positive(1)
    • 最终rank < 初始rank:标记为negative(-1)
    • rank无变化:标记为neutral(0)(可按需保留或过滤)

完整代码实现

import pandas as pd

# 构造示例数据集
data = pd.DataFrame({
    'keyword': ['test']*12,
    'id': [185,999,810,442,188,185,999,810,442,188,185,185],
    'rank': [45,44,43,42,41,45,41,43,42,41,48,90],
    'date': ['11/3/2001','11/3/2001','11/3/2001','11/3/2001','11/3/2001',
             '11/3/2001','11/3/2004','11/3/2001','11/3/2001','11/3/2001',
             '20/04/2002','20/05/2003']
})

# 转换日期列,自动识别多种日/月/年格式
data['date'] = pd.to_datetime(data['date'], dayfirst=True)

# 定义趋势判断函数
def judge_trend(group):
    # 按时间排序
    sorted_group = group.sort_values('date')
    first_rank = sorted_group['rank'].iloc[0]
    last_rank = sorted_group['rank'].iloc[-1]
    if last_rank > first_rank:
        return 'positive(1)'
    elif last_rank < first_rank:
        return 'negative(-1)'
    else:
        return 'neutral(0)'

# 分组计算趋势
trend_result = data.groupby(['keyword', 'id']).apply(judge_trend).reset_index(name='trend')

# 输出完整结果
print(trend_result)

运行结果

keyword   id         trend
0    test  185  positive(1)
1    test  188    neutral(0)
2    test  442    neutral(0)
3    test  810    neutral(0)
4    test  999  negative(-1)

如果只需要显示有变化的分组,可过滤掉neutral记录:

filtered_result = trend_result[trend_result['trend'] != 'neutral(0)']
print(filtered_result)

输出与你期望的示例一致:

keyword   id         trend
0    test  185  positive(1)
4    test  999  negative(-1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 10:30:53