基于Unique ID #对date_time列排序并实现递增赋值的循环需求
按Unique ID分组排序并分配连续序号的解决方案
嘿,我来帮你搞定这个需求!你想要的是基于Unique ID分组,对每组内的date_time列升序排序,然后给每条记录分配从1开始的连续数值对吧?用Python的Pandas库可以轻松实现,我给你两种实用的方法,还有例子供参考:
方法一:先排序再分组计数(直观易理解)
这种方法先把整个数据集按Unique_ID和date_time排序,再对每个分组用cumcount()生成序号(注意cumcount()从0开始,所以要加1):
import pandas as pd # 先确保date_time是datetime类型(避免字符串排序出错) df['date_time'] = pd.to_datetime(df['date_time']) # 按Unique_ID和date_time升序排序整个数据集 df = df.sort_values(by=['Unique_ID', 'date_time']) # 分组后分配从1开始的连续序号 df['sequence_num'] = df.groupby('Unique_ID').cumcount() + 1
方法二:用rank直接生成序号(无需提前排序)
如果不想提前修改整个数据集的排序顺序,可以用rank()方法,在分组内对date_time排序并直接生成序号:
import pandas as pd df['date_time'] = pd.to_datetime(df['date_time']) # 分组内按date_time升序排名,method='first'保证相同时间时按原始顺序分配序号 df['sequence_num'] = df.groupby('Unique_ID')['date_time'].rank(method='first', ascending=True).astype(int)
效果示例
假设你的原始数据集是这样的:
| Unique_ID | date_time |
|---|---|
| 1 | 2023-10-02 14:00:00 |
| 1 | 2023-10-01 10:00:00 |
| 2 | 2023-09-30 09:00:00 |
| 2 | 2023-10-01 11:00:00 |
经过上面任意一种方法处理后,会得到你预期的结果:
| Unique_ID | date_time | sequence_num |
|---|---|---|
| 1 | 2023-10-01 10:00:00 | 1 |
| 1 | 2023-10-02 14:00:00 | 2 |
| 2 | 2023-09-30 09:00:00 | 1 |
| 2 | 2023-10-01 11:00:00 | 2 |
如果你的数据集用的是其他工具(比如SQL),也可以告诉我,我再给你对应的解决方案哦!
内容的提问来源于stack exchange,提问作者deez
相关产品推荐
相关产品推荐

