如何对齐pandas DataFrame两列 匹配保留原值不匹配填充0
对齐Pandas DataFrame两列的解决方案
实现逻辑
- 先提取
col2列的所有非空有效值存入集合,匹配效率远高于逐行遍历 - 对
col1列的每一个值做匹配判断:如果值在有效值集合中,col2对应位置保留该值,否则填充默认值0 - 全程使用向量化操作,支持大数据量场景使用
完整实现代码
import pandas as pd # 构造示例数据(你的真实数据可以直接读取,替换这一步即可) df = pd.DataFrame(data={ 'col1': [1.91, 2, 3.1, 4, 5, 6, 7.7, 8, 9, 10.8932], 'col2': [1.91, 3.1, 6, 7.7, 9, 'NaN', 'NaN', 'NaN', 'NaN','NaN'] }) # 处理col2中的字符串格式NaN,转换为pandas可识别的空值 df['col2'] = pd.to_numeric(df['col2'], errors='coerce') # 提取col2的非空有效值集合 valid_col2_values = set(df['col2'].dropna()) # 生成对齐后的col2列 df['col2'] = df['col1'].where(df['col1'].isin(valid_col2_values), 0) # 查看结果 print(df)
运行输出结果
col1 col2 0 1.9100 1.91 1 2.0000 0.00 2 3.1000 3.10 3 4.0000 0.00 4 5.0000 0.00 5 6.0000 6.00 6 7.7000 7.70 7 8.0000 0.00 8 9.0000 9.00 9 10.8932 0.00
注意事项
如果你的数据涉及浮点数,存在精度差异问题(比如col1存储为1.9100000001,col2存储为1.91),可以先对两列做统一精度处理后再匹配,示例如下:
# 统一保留4位小数后再做匹配 df[['col1', 'col2']] = df[['col1', 'col2']].round(4)
内容的提问来源于stack exchange,提问作者user14057357
相关产品推荐
相关产品推荐

