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

如何在Pandas DataFrame中按名称识别排名提升(数值下降)的产品趋势?

嘿,我懂你遇到的问题了!你之前的代码是对整个DataFrame做diff()计算,相当于把所有产品的排名混在一起对比了,完全没考虑按NAME分组分析——这肯定不是你要的效果对吧?

别担心,咱们只需要做两个关键调整就能解决:

第一步:先按产品和时间排序(必做!)

首先得确保每个产品的记录是按SNAPDATE的先后顺序排列的,不然diff()计算出来的差值会完全混乱:

df = df.sort_values(by=['NAME', 'SNAPDATE'])

第二步:按NAME分组计算排名差值

用groupby把数据按产品分组,然后在每个组内计算RANK的相邻差值,这样就只会对比同一个产品在不同时间的排名变化了:

import numpy as np
import pandas as pd

# 计算每个产品组内的RANK差值
df['rank_diff'] = df.groupby('NAME')['RANK'].diff()

# 标记排名变化:注意哦,你说的「排名提升」对应RANK数值下降,也就是diff为负数
df['change'] = np.where(
    df['rank_diff'] < 0, 
    '排名提升',  # 这里可以换成你习惯的描述,比如'promoted'
    np.where(
        df['rank_diff'] > 0, 
        '排名下降',  # 对应RANK数值上升
        '无变化'
    )
)

第三步:筛选出排名提升的产品

如果只想看那些有排名提升的记录,直接过滤就行:

promoted_records = df[df['change'] == '排名提升']
print(promoted_records)

小提醒

  • 如果某个产品只有一条记录,rank_diff会显示NaN,你可以根据需求用fillna()把它替换成类似「首次出现」的标记
  • 一定要记得先排序!如果时间顺序乱了,差值的正负就会反过来,结果完全不对

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:09:49