如何在pandas.DataFrame中按条件补全A列0-3缺失行并填充B列值
实现方案
不需要自行判断ID切换逻辑,直接用pandas笛卡尔积+重索引即可一步得到你给出的第一种标准预期结果,代码简洁且稳定性更高,不管ID排序规则是什么都能正常生效。
核心代码
import pandas as pd # 构造示例df(你可以直接替换为自己的真实df) data = { 'ID': ['a','a','a','b','c','c','c','d','d','e','f','f','f','g','g'], 'A': [0,1,2,3,0,2,3,0,1,2,1,2,3,1,2], 'B': [111]*15 } df = pd.DataFrame(data).reset_index(names='origin_index') # 1. 生成所有ID与[0,1,2,3]的完整配对组合 full_combinations = pd.MultiIndex.from_product( [df['ID'].unique(), [0,1,2,3]], names=['ID', 'A'] ) # 2. 重索引补全缺失行,空值填充0后重置行索引 result = df.set_index(['ID', 'A'])\ .reindex(full_combinations, fill_value=0)\ .reset_index()\ .reset_index(drop=True) # 不需要保留原索引列的话可以加这行删除 # result = result.drop('origin_index', axis=1)
运行后输出的result完全匹配你给出的第一种预期结果,补入的行B值自动填充为0,每个ID都完整覆盖0、1、2、3四个A值。
内容的提问来源于stack exchange,提问作者김수환
相关产品推荐
相关产品推荐

