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

如何按组用相同code字符填充DataFrame中的NA值?

按组填充缺失的code值

问题描述

我有如下数据集,希望按Keya分组,将code列中的'NA'值填充为同组内一致的code字符。示例中第一个'NA'应填充为'S',第二个'NA'应填充为'F'。数据集及预处理代码如下:

df = {'Key': ['111*1', '111*2','111*3', '222*1','222*2', '333*1','333*2', '333*3','333*4', '444*1'],
        'code': ['S', 'S','NA', 'M','M', 'F','F', 'F','NA', 'C']}
  
# 创建DataFrame
df = pd.DataFrame(df)
df[['Keya', 'Keyb']] = df['Key'].str.split('\\*', expand=True, regex=True)
print(df)

解决方案

可以通过以下步骤实现按组填充:

  • 先将字符串形式的'NA'转换为pandas标准缺失值NaN
  • 按Keya分组,用组内的非缺失值填充所有缺失项(因为同组内code值一致,直接取组内有效值即可)

完整代码如下:

import pandas as pd

df = {'Key': ['111*1', '111*2','111*3', '222*1','222*2', '333*1','333*2', '333*3','333*4', '444*1'],
        'code': ['S', 'S','NA', 'M','M', 'F','F', 'F','NA', 'C']}
  
# 创建DataFrame
df = pd.DataFrame(df)
df[['Keya', 'Keyb']] = df['Key'].str.split('\\*', expand=True, regex=True)

# 将字符串'NA'转为NaN
df['code'] = df['code'].replace('NA', pd.NA)

# 按Keya分组,用组内有效值填充缺失值
df['code'] = df.groupby('Keya')['code'].transform(lambda x: x.ffill().bfill())

print(df)

代码说明

  • replace('NA', pd.NA):把数据中字符串类型的'NA'替换成pandas能识别的缺失值,方便后续填充操作
  • groupby('Keya')['code'].transform(...):按Keya分组后,对每组的code列执行填充。ffill().bfill()组合可以确保无论缺失值在组的哪个位置,都能被组内的有效值填充(因为同组code值一致,所以取第一个或最后一个有效值都可以,这里用双向填充更稳妥)

运行后,code列的两个缺失值会被正确填充为对应组的'S'和'F'。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:30:11