如何为按姓名分组后缺失指定Type值的DataFrame创建新行?
解决方法
可以通过生成分组与所有Type的全量组合,再和原数据合并的方式补全缺失记录,具体步骤如下:
生成分组-全量Type的笛卡尔积
先提取所有唯一的姓名组合(First Name + Last Name),再和types列表做笛卡尔积,得到每个姓名组合对应所有Type的完整框架。合并原数据并补全缺失值
将原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
相关产品推荐
相关产品推荐

