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

Python按ID分组获取首行值问题:需保留NaN的解决方案

按ID分组保留首个原始team值(含NaN)的解决方案

当前代码通过分组聚合获取team列的首个值时,会自动忽略NaN,取分组内第一个非空值,但实际需求是保留分组内第一行的原始team值(即使是NaN),并将其映射到对应ID的所有行的first_team列。

样本数据集(当前错误输出)

ID     date           name       team       first_team
 101   05/2012         James      NaN            NY
 101   07/2012         James      NY             NY
 102   06/2013         Adams      NC             NC
 102   05/2014         Adams      AL             NC 

现有代码

first_dict = df.groupby('ID').agg({'team':'first'}).to_dict()['team']
df['first_team'] = df['ID'].apply(lambda x: first_dict[x])

期望输出

ID      date        name      team         first_team 
  101     05/2012     James      NaN           NaN 
  101     07/2012     James      NY            NaN 
  102     06/2013     Adams      NC            NC 
  102     05/2014     Adams      AL            NC 

解决方案

问题出在agg('first')会自动跳过NaN,我们需要用nth(0)来获取分组内的第一行原始值(包含NaN),修改后的代码如下:

# 获取每个ID分组的第一行team值(保留NaN)
first_dict = df.groupby('ID')['team'].nth(0).to_dict()
df['first_team'] = df['ID'].map(first_dict)

说明

  • groupby('ID')['team'].nth(0)会严格返回每个分组第0个位置的原始值,不会自动过滤NaN;
  • 用map()替代apply(lambda x: ...),语法更简洁,性能也更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:17:09