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

Pandas中groupby分组首元素赋值至DataFrame列出现NaN值的问题排查

问题原因与解决方案

这是个Pandas里很常见的索引对齐问题,我来帮你理清楚为什么会出现全NaT的情况,以及怎么解决:

为什么会出现全NaT?

你执行df.groupby('cumsum').first()['Date']后得到的Series,它的索引是cumsum列的唯一值(比如1、2、3...561),而你的原始DataFramedf的索引是时间戳(比如2021-01-01 00:00:00这类)。

当你直接用df["Date_First"] = 分组结果赋值时,Pandas会严格按照索引匹配来填充数据:它会拿原df的每一行索引,去分组结果的索引里找对应的值,但两者的索引完全不重合,所以所有位置都只能填充NaT(时间类型的缺失值)。

解决办法

有几种简单的方式可以实现你的需求,推荐用第一种最直接的:

方法1:用groupby.transform()

transform方法会自动把分组后的结果广播到该组的每一行,返回和原df长度一致、索引匹配的Series,直接赋值就没问题:

df["Date_First"] = df.groupby('cumsum')['Date'].transform('first')

方法2:用字典映射

先把分组后的首日期转成字典(键是cumsum的值,值是对应首日期),再通过map方法匹配到原df的每一行:

# 先构建cumsum到首日期的映射字典
first_date_map = df.groupby('cumsum')['Date'].first().to_dict()
# 用map把每个cumsum值对应的首日期填充到新列
df["Date_First"] = df['cumsum'].map(first_date_map)

方法3:合并DataFrame

如果你需要保留更多分组相关的信息,可以先把分组结果转成带cumsum列的DataFrame,再和原df合并:

# 生成包含cumsum和对应首日期的DataFrame
first_date_df = df.groupby('cumsum')['Date'].first().reset_index(name='Date_First')
# 左连接合并,保证原df的所有行都保留
df = df.merge(first_date_df, on='cumsum', how='left')

这三种方法都能帮你正确把分组首日期填充到新列里,不会再出现全NaT的情况啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 07:12:45