是否存在与Stata fillin命令功能等效的Pandas函数?
Pandas 实现 Stata fillin 命令的高效方案
Stata 的 fillin 命令核心作用是生成指定列的所有笛卡尔积组合,将非矩形数据集补全为矩形结构,缺失的其他字段自动填充为空值。
你原有代码性能差的核心原因是:通过循环遍历所有组合、逐次拼接 DataFrame 的实现方式时间复杂度极高,数据量稍大就会出现运行慢、内存占用高的问题,可替换为pandas内置的向量化操作实现,代码如下:
import pandas as pd # 仅保留需要的字段(和你原有逻辑一致) collapse_df = collapse_df[['cod', 'loc_id', 'fob']] # 1. 提取两个fillin维度的唯一值 unique_loc = collapse_df['loc_id'].unique() unique_cod = collapse_df['cod'].unique() # 2. 生成两个维度的全量笛卡尔积组合 full_combo = pd.MultiIndex.from_product( [unique_loc, unique_cod], names=['loc_id', 'cod'] ).to_frame(index=False) # 3. 左连接原表,自动补全缺失组合,完成fillin效果 collapse_df = full_combo.merge(collapse_df, on=['loc_id', 'cod'], how='left') # 可选:如果需要将缺失的fob值填充为0,可取消注释下行 # collapse_df['fob'] = collapse_df['fob'].fillna(0)
上述方案完全规避了循环操作,基于pandas优化的向量化运算实现,运行效率相比原有代码有数量级的提升,内存开销也会大幅降低。
内容的提问来源于stack exchange,提问作者J. Raji
相关产品推荐
相关产品推荐

