如何基于单列多唯一值移除Pandas DataFrame重复行及指定行
Pandas 按条件删行+去重实现方案
核心操作拆解
你需要完成两个核心任务:
- 删除所有
a列值为2的行 - 删除所有
b列值为35的行 - 基于单列(或多列)唯一值移除重复行
代码实现
先构造示例数据,再按步骤处理:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame() df['a'] = [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3] df['b'] = [34,34,35,35,35,23,23,23,35,35,89,89,89,78,78] # 第一步:过滤不符合条件的行 # 同时满足「a≠2」和「b≠35」两个条件 filtered_df = df[(df['a'] != 2) & (df['b'] != 35)] # 第二步:移除重复行 # 场景1:基于所有列去重(整行完全重复才删除) final_df = filtered_df.drop_duplicates() # 场景2:仅基于a列去重(保留每个a值的首次出现行) # final_df = filtered_df.drop_duplicates(subset='a')
结果展示
- 基于所有列去重的结果:
| a | b |
|---|---|
| 1 | 34 |
| 3 | 89 |
| 3 | 78 |
- 仅基于a列去重的结果:
| a | b |
|---|---|
| 1 | 34 |
| 3 | 89 |
扩展到多列场景
如果实际有多个类似b的列(比如b1、b2),需要删除这些列中任意一列值为35的行,可以用以下代码:
# 指定需要检查的列集合 check_cols = ['b', 'b1', 'b2'] # 过滤条件:a≠2,且所有检查列的值都不等于35 filtered_df = df[(df['a'] != 2) & (~df[check_cols].eq(35).any(axis=1))] # 执行去重 final_df = filtered_df.drop_duplicates()
内容的提问来源于stack exchange,提问作者Sushil Kokil
相关产品推荐
相关产品推荐

