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

Pandas中按顺序为重复row_hash生成递增连续分组编号的问题

解决Pandas连续相同值分组的rank问题

你的问题核心是要对连续相同的row_hash进行分组,而不是把所有相同row_hash的行归为一组——这属于数据处理里的"连续值岛屿"问题,之前的代码逻辑不对,所以得不到预期结果。

问题原因

你之前的代码是按ID和row_hash分组计算rank:

snapshot_df['dense_rank'] = snapshot_df.groupby(['ID', 'row_hash'])['snapshot_date'].rank(
            method='dense').astype(int)

这种方式会把同一个ID下所有row_hash=123的行(不管时间是否连续)归为同一组,所以1月1日和1月7日的123会共享同一个rank,不符合你要的"连续相同值算一组"的需求。

解决方案

要实现连续相同row_hash的分组rank,步骤如下:

  1. 先确保数据按ID和时间排序(必须保证顺序正确,否则结果会出错):
snapshot_df = snapshot_df.sort_values(['ID', 'snapshot_date'])
  1. 计算每个ID组内的row_hash变化标记:
    对比当前行和前一行的row_hash,不同则标记为1,否则为0:
snapshot_df['hash_changed'] = snapshot_df.groupby('ID')['row_hash'].apply(
    lambda x: x != x.shift()
).astype(int)
  1. 累加变化标记得到目标rank:
    对每个ID组内的变化标记做累加,每遇到一次变化(标记为1),rank就递增:
snapshot_df['需要的dense_rank'] = snapshot_df.groupby('ID')['hash_changed'].cumsum()

验证结果

运行上述代码后,生成的需要的dense_rank列会和你预期的完全一致:

IDsnapshot_daterow_hash需要的dense_rank
qwe2024年1月1日1231
qwe2024年1月3日4562
qwe2024年1月5日4562
qwe2024年1月7日1233

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:17:43