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

如何为按姓名分组后缺失指定Type值的DataFrame创建新行?

解决方法

可以通过生成分组与所有Type的全量组合,再和原数据合并的方式补全缺失记录,具体步骤如下:

  1. 生成分组-全量Type的笛卡尔积
    先提取所有唯一的姓名组合(First Name + Last Name),再和types列表做笛卡尔积,得到每个姓名组合对应所有Type的完整框架。

  2. 合并原数据并补全缺失值
    将原DataFrame和全量框架做左连接,缺失的Type对应的Value会显示为NaN,最后把这些NaN替换为0即可。

完整代码实现

import pandas as pd

data = {
    'First Name': ['Alice', 'Alice', 'Alice', 'Alice', 'Bob', 'Bob'],
    'Last Name': ['Johnson', 'Johnson', 'Johnson', 'Johnson', 'Jack', 'Jack'],
    'Type': ['CA', 'DA', 'FA', 'GCA', 'CA', 'GCA'],
    'Value': [25, 30, 35, 40, 50, 37]
}

types = ['CA', 'DA', 'FA', 'GCA']
df = pd.DataFrame(data)

# 获取所有唯一的姓名分组
name_groups = df[['First Name', 'Last Name']].drop_duplicates()

# 生成姓名分组与所有Type的笛卡尔积
full_combinations = name_groups.assign(key=1).merge(pd.DataFrame({'Type': types, 'key': 1}), on='key').drop('key', axis=1)

# 左连接原数据,补全缺失的Value为0
result_df = full_combinations.merge(df, on=['First Name', 'Last Name', 'Type'], how='left').fillna({'Value': 0})

# 按姓名和Type排序,规整结果
result_df = result_df.sort_values(by=['First Name', 'Last Name', 'Type']).reset_index(drop=True)

print(result_df)

输出结果

First Name Last Name  Type  Value
0      Alice   Johnson    CA   25.0
1      Alice   Johnson    DA   30.0
2      Alice   Johnson    FA   35.0
3      Alice   Johnson   GCA   40.0
4        Bob      Jack    CA   50.0
5        Bob      Jack    DA    0.0
6        Bob      Jack    FA    0.0
7        Bob      Jack   GCA   37.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 20:22:18