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

Pandas新增列标记DataFrame中各文件每年首次出现的记录

实现方案

你之前的单字段分组只能统计全量数据下每个文件的首次出现,只要把年份维度加入分组键,就可以用Pandas原生groupby逻辑直接实现需求,完全不需要循环切分、拼接子表,性能和代码简洁度都会高很多。

具体实现代码

  1. 前置依赖和格式校验
    首先确保时间列是标准datetime格式,如果已经做过类型转换可以跳过这步:
import pandas as pd
import numpy as np

df["Date/time"] = pd.to_datetime(df["Date/time"])
  1. 排序保证时序正确
    先按文件、时间升序排列,保证每个文件的记录按发生时间从早到晚排列:
df = df.sort_values(["File", "Date/time"]).reset_index(drop=True)
  1. 双维度分组标记首次出现
    分组键同时传入文件列、从时间列提取的年份列,组内做累计计数,计数为0的行就是当年该文件的第一条记录,标记为1,其余行留空:
# 定义分组键:文件 + 所属年份
group_cols = [df["File"], df["Date/time"].dt.year]
# 组内累计计数,每组第一条记录计数为0
in_group_cumcount = df.groupby(group_cols).cumcount()
# 生成目标列
df["First occurrence"] = np.where(in_group_cumcount == 0, 1, pd.NA)

原有循环方案问题说明

你写的循环拼接方案出现值覆盖,核心原因是循环内赋值的列名是First scan,和最终需要的First occurrence列名不统一,拼接时会出现列错位;而且循环切分子表再拼接的实现效率很低,数据量较大时性能差距会非常明显,不推荐使用。

运行上述代码后得到的结果和你给出的期望输出完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 03:39:35