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

如何创建统计id与time组合出现次数的occurrence变量

问题描述

现有如下数据:

#id time 
#1  1
#1  2
#2  1
#2  2
#2  1
#2  2
#3  1
#3  2

需要创建一个occurrence变量,针对id与time的组合,首次出现标记为1,第二次出现标记为2,期望得到的结果如下:

#id time occurrence
#1  1    1
#1  2    1
#2  1    1
#2  2    1
#2  1    2
#2  2    2
#3  1    1
#3  2    1

R语言实现

使用dplyr包的分组与行号函数即可实现:

library(dplyr)

# 构造数据框
df <- data.frame(
  id = c(1,1,2,2,2,2,3,3),
  time = c(1,2,1,2,1,2,1,2)
)

# 生成occurrence列
df <- df %>%
  group_by(id, time) %>%
  mutate(occurrence = row_number()) %>%
  ungroup()

print(df)

按id和time分组后,row_number()会为每组内的行按出现顺序生成连续编号,正好匹配需求的标记规则。

Python(Pandas)实现

借助Pandas的分组与累计计数函数:

import pandas as pd

# 构造数据框
df = pd.DataFrame({
    'id': [1,1,2,2,2,2,3,3],
    'time': [1,2,1,2,1,2,1,2]
})

# 生成occurrence列(cumcount从0开始,加1转为从1计数)
df['occurrence'] = df.groupby(['id', 'time']).cumcount() + 1

print(df)

SQL实现

利用窗口函数ROW_NUMBER()完成分组编号:

SELECT 
    id,
    time,
    ROW_NUMBER() OVER (PARTITION BY id, time ORDER BY (SELECT NULL)) AS occurrence
FROM your_table_name;

PARTITION BY id, time按指定组合分组,ROW_NUMBER()为每组内的行生成顺序编号;ORDER BY (SELECT NULL)用于保留原始数据的行顺序,不同数据库可根据实际情况调整排序规则(比如MySQL可用ORDER BY 1)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:42:48