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

如何在按日期排序的Pandas DataFrame中标记列元素首次出现记录

标记Pandas DataFrame中分组首次出现的记录

问题描述

现有一个按Date字段降序排序的Pandas DataFrame,数据定义及展示如下:

原始DataFrame代码

import pandas as pd

df = pd.DataFrame({"Date":['2023-02-11','2023-02-10','2023-02-09','2023-02-08','2023-02-07','2023-02-06','2023-02-05'],
                   "A":['a','a','c','a','c','b','b'],
                   "B":[1,2,3,4,5,6,7]})

原始数据展示

Date        A   B
2023-02-11  a   1
2023-02-10  a   2
2023-02-09  c   3
2023-02-08  a   4
2023-02-07  c   5
2023-02-06  b   6
2023-02-05  b   7

需要新增一列FirstTime:当该行是A列对应符号**首次出现(即最早日期)**的记录时,值为1,否则为0。期望输出如下:

Date        A   B   FirstTime
2023-02-11  a   1   0
2023-02-10  a   2   0
2023-02-09  c   3   0
2023-02-08  a   4   1
2023-02-07  c   5   1
2023-02-06  b   6   0
2023-02-05  b   7   1

解决方案

由于DataFrame按Date降序排列,每个A分组的最后一行即为该符号首次出现的记录,以下两种方法均可实现需求:

方法一:分组定位最后一行标记

# 初始化新列为0
df['FirstTime'] = 0
# 获取每个A分组最后一行的索引
first_rows_idx = df.groupby('A').tail(1).index
# 给对应行赋值1
df.loc[first_rows_idx, 'FirstTime'] = 1

方法二:反向累计计数判断

利用cumcount反向计数,判断是否为分组内的最后一行:

# 按A分组反向累计计数,计数为0的行即为首次出现的记录,转成int类型
df['FirstTime'] = df.groupby('A').cumcount(ascending=False).eq(0).astype(int)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 07:19:54