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

基于ID覆盖DataFrame中t列的NaN值(同ID值需一致)

用同一ID的非NaN值填充DataFrame缺失值的解决方案

嘿,这个需求我之前处理过好多次,用Pandas的分组操作就能轻松搞定,给你两种靠谱的实现方式:

首先先确认你的初始数据:

import pandas as pd

df = pd.DataFrame({"t" : [4, 4, 1, 1, float('nan'), 2, 2, 2, float('nan'), 10], "id": [1, 1, 2, 2, 3, 3, 3 , 3, 4, 4]})

方法1:分组后提取组内有效值填充

利用groupby按id分组,然后通过transform对每个组的t列进行填充。因为同一id的t值都是一致的,我们只需要提取组内第一个非NaN值,再填充组内的缺失值即可:

df['t'] = df.groupby('id')['t'].transform(lambda x: x.fillna(x.dropna().iloc[0]))

这里x.dropna().iloc[0]会取出当前组里第一个有效的t值,再用fillna把组内所有NaN替换成这个值,完美匹配你的需求。

方法2:组内前后填充结合

另一种更简洁的方式是利用分组后的向前填充(ffill)和向后填充(bfill)结合,不管NaN出现在组内的开头还是中间,都能被有效值覆盖:

df['t'] = df.groupby('id')['t'].apply(lambda x: x.ffill().bfill())

ffill()会把组内前面的有效值往后填充,bfill()则把后面的有效值往前填充,两者结合就能确保所有NaN都被正确替换。

运行任意一种方法后,你都会得到想要的结果:

print(df)
# 输出:
#     t  id
# 0   4   1
# 1   4   1
# 2   1   2
# 3   1   2
# 4   2   3
# 5   2   3
# 6   2   3
# 7   2   3
# 8  10   4
# 9  10   4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:36:45