如何以另一DataFrame为行列参考保留目标DataFrame值并替换其余值
Pandas实现指定行列位置保留值的方案
方案1:小数据量易读实现
逻辑简单直观,适合数据量不大的场景:
# 复制原df结构,先将所有值初始化为目标替换字符串"NaN" res = df.copy() res.loc[:, :] = "NaN" # 遍历需要保留的坐标点,回填原始值 for idx, col in df_cross.itertuples(index=False, name=None): res.loc[idx, col] = df.loc[idx, col] print(res)
方案2:大数据量向量化实现
全程无循环,性能更高,适合数据规模较大的场景:
# 将需要保留的行列组合转换为MultiIndex格式 keep_points = pd.MultiIndex.from_frame(df_cross) # 堆叠DataFrame为Series后做索引匹配,不符合要求的位置替换为"NaN"后再展开回DataFrame res = df.stack().where(df.stack().index.isin(keep_points), "NaN").unstack() print(res)
注意事项
如果实际使用中行列索引是计算生成的浮点数,可能存在精度误差导致匹配失败,建议提前把df的索引、列名以及df_cross的两列数据都用round()统一保留相同小数位后再执行上述操作。
内容的提问来源于stack exchange,提问作者Romero_91
相关产品推荐
相关产品推荐

