如何在Pandas DataFrame中筛选并仅展示指定对比列值不同的行
解决方案:筛选并仅展示指定列的差异行
其实这个需求很容易实现,核心就是先筛选出Name和Displ_name不相等的行,再明确指定只保留这两列就行啦!给你几种实用的方法:
方法一:高效的列直接对比(推荐)
这种方法比apply或者np.where更简洁高效,尤其适合你的数据集:
# 生成布尔掩码:标记两行值不等的行 mask = df_full["Name"] != df_full["Displ_name"] # 筛选行并仅保留Name和Displ_name列 diff_rows = df_full.loc[mask, ["Name", "Displ_name"]]
如果想让结果的索引更整洁(避免原DataFrame的索引混乱),可以加上重置索引的操作:
diff_rows = df_full.loc[mask, ["Name", "Displ_name"]].reset_index(drop=True)
方法二:优化你原来的apply写法
如果你习惯用apply,只需要在筛选之后加上列选择即可:
diff_rows = df_full[df_full.apply(lambda x: x["Name"] != x["Displ_name"], axis=1)][["Name", "Displ_name"]]
不过要注意,apply在处理大型数据集时效率会比直接列对比低一些,所以更推荐第一种方法。
方法三:基于你已有的np.where结果
如果你已经用np.where生成了布尔列表,也可以直接用它来筛选:
comparison_column = np.where((df_full["Name"] == df_full["Displ_name"]), True, False) # 取反得到不等的行,再选择指定列 diff_rows = df_full.loc[~comparison_column, ["Name", "Displ_name"]]
这里的~是取反操作,把原来的True(相等)转换成False,False(不等)转换成True,刚好符合我们的筛选需求。
内容的提问来源于stack exchange,提问作者Elena Dobrovskiy
相关产品推荐
相关产品推荐

