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

Python实现:为DataFrame补全缺失特征行(替代pyjanitor的complete方法)

替代pyjanitor的DataFrame特征补全方案

现有如下结构的DataFrame:

import pandas as pd

df = pd.DataFrame({
    'ID': [1,1,1,1,2,2,3],
    'feature': ['Color', 'Finish', 'Shelfs', 'WiFi', 'Shelfs', 'WiFi', 'Color'],
    'feature_val': ['White', 'Steel', '2', 'Y', '3', 'N', 'Black'],
    'source': ['A', 'A', 'B', 'B', 'A', 'A', 'B']
})

需求:为每个ID补全所有特征(Color、Finish、Shelfs、WiFi)对应的行,缺失特征的feature_val设为NaN,source设为UNK。

之前用pyjanitor的complete方法实现,但因安装问题需要替代方案,以下是基于原生pandas的实现:


实现步骤

  1. 生成所有ID与所有特征的全量组合(笛卡尔积)
  2. 将原始数据与全量组合做左连接,自动补全缺失行
  3. 对source列的缺失值填充UNK,feature_val自然保留NaN

完整代码

# 获取所有唯一ID和所有特征(支持动态提取特征,无需硬编码)
unique_ids = df['ID'].unique()
all_features = df['feature'].unique()  # 如果特征固定也可以直接写列表:['Color', 'Finish', 'Shelfs', 'WiFi']

# 生成ID-feature的全量组合
full_combinations = pd.MultiIndex.from_product(
    [unique_ids, all_features], 
    names=['ID', 'feature']
).to_frame(index=False)

# 左连接原始数据,补全缺失行
complete_df = full_combinations.merge(df, on=['ID', 'feature'], how='left')

# 填充source列的缺失值为UNK
complete_df['source'] = complete_df['source'].fillna('UNK')

# 查看结果
print(complete_df)

输出结果

ID  feature feature_val source
0   1    Color        White      A
1   1   Finish        Steel      A
2   1   Shelfs           2      B
3   1     WiFi           Y      B
4   2    Color         NaN    UNK
5   2   Finish         NaN    UNK
6   2   Shelfs           3      A
7   2     WiFi           N      A
8   3    Color        Black      B
9   3   Finish         NaN    UNK
10  3   Shelfs         NaN    UNK
11  3     WiFi         NaN    UNK

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 07:55:10