如何更高效地在Pandas DataFrame中对行应用筛选并检测行差异?
Pandas中高效筛选两行差异列的优化方法
你的代码可以通过减少中间步骤、简化逻辑来优化,直接比较两行元素是否不等即可,无需额外创建差值行,以下是几种更优的实现方式:
方法一:精简Series操作
import pandas as pd data = [ (10, 20, 30, 40, 50, 60, 70), (10, 30, 30, 40, 50, 60, 100) ] df = pd.DataFrame(data, columns=["a", "b", "c", "d", "d", "f", "g"]) # 直接对比第0行和第1行的元素差异 diff_mask = df.iloc[0] != df.iloc[1] # 筛选出存在差异的列 diff_columns = diff_mask[diff_mask] # 输出差异列的数量 print(len(diff_columns))
方法二:一行式列索引筛选
如果只需要获取差异列的数量或列名,可以直接通过布尔索引从列名中提取:
import pandas as pd data = [ (10, 20, 30, 40, 50, 60, 70), (10, 30, 30, 40, 50, 60, 100) ] df = pd.DataFrame(data, columns=["a", "b", "c", "d", "d", "f", "g"]) # 直接筛选差异列并获取数量 diff_count = len(df.columns[df.iloc[0] != df.iloc[1]]) print(diff_count)
优化点说明
- 逻辑更直观:直接用
!=对比两行元素,无需计算差值,对非数值类型(如字符串)也能兼容,适用性更强 - 减少内存占用:避免创建额外的
diff行和中间DataFrame(原代码中的df_1、df_2),仅通过Series或列索引操作完成 - 执行效率更高:省去了差值计算的步骤,尤其是在数据量较大时,性能提升更明显
内容的提问来源于stack exchange,提问作者Gaurang Shah
相关产品推荐
相关产品推荐

