如何更高效移除DataFrame列中相同值、保留差异值?
高效替换指定列相同值为空格的方法
直接用pandas的矢量化操作替代循环迭代,效率会提升很多,尤其在数据量较大时效果明显。假设合并后的res数据表中,你需要对比的是成对的对应列(比如us_col和gb_col这类一一对应的列),可以按以下方式处理:
方法1:使用pandas内置where方法批量处理
先定义需要对比的列对,再通过where方法保留差异值、替换相同值为空格:
# 定义要对比的列对(根据你的实际列名修改) column_pairs = [('us_col1', 'gb_col1'), ('us_col2', 'gb_col2')] for us_col, gb_col in column_pairs: # 两列值不同时保留原内容,相同时替换为空格 res[us_col] = res[us_col].where(res[us_col] != res[gb_col], '') res[gb_col] = res[gb_col].where(res[us_col] != res[gb_col], '')
方法2:借助numpy.where实现相同逻辑
如果更习惯用numpy的语法,也可以用以下写法,性能和pandas的where方法基本一致:
import numpy as np for us_col, gb_col in column_pairs: res[us_col] = np.where(res[us_col] != res[gb_col], res[us_col], '') res[gb_col] = np.where(res[us_col] != res[gb_col], res[gb_col], '')
性能优势说明
- pandas和numpy的矢量化操作是基于底层C语言实现的,避免了Python层面逐行循环的开销,数据量越大,对比循环迭代的速度提升越显著(数据量上万级时,速度能提升几十甚至上百倍)。
- 逐行循环的方式在数据量增大后会出现明显的性能瓶颈,矢量化操作能最大化利用CPU的批量处理能力。
内容的提问来源于stack exchange,提问作者Rustam Karimov
相关产品推荐
相关产品推荐

