如何在Pandas DataFrame中删除两列错位重复值对应的行
实现方案
直接用pandas内置方法即可实现,代码逻辑清晰,不需要额外依赖:
import pandas as pd # 原始数据构造 data = [['1044', '1924'], ['1044', '1926'], ['1044', '1927'], ['1044', '1928'], ['1048', '1924'], ['1048', '1926'], ['1048', '1927'], ['1048', '1928'], ['1051', '1924'], ['1051', '1926'], ['1051', '1927'], ['1051', '1928'], ['1058', '']] df = pd.DataFrame(data, columns = ['Col1', 'Col2']) # 规则1实现:Col1(Date列)仅保留第一次出现的取值,重复位置置为空 df['Col1'] = df['Col1'].mask(df['Col1'].duplicated(), '') # 规则2实现:删除对应行,两种场景按需选择 # 场景1:匹配你示例中提到的删除第3行需求,直接过滤所有Col2为1928的行 df = df[df['Col2'] != '1928'] # 场景2:如果是要删除每个原始Col1分组的最后一条记录,用下面的代码替代上面的场景1代码即可 # df = df.groupby('Col1', as_index=False, group_keys=False).apply(lambda x: x.iloc[:-1] if len(x) > 1 else x)
输出结果
按场景1代码执行后得到的最终DataFrame如下:
| Col1 | Col2 |
|---|---|
| 1044 | 1924 |
| 1926 | |
| 1927 | |
| 1048 | 1924 |
| 1926 | |
| 1927 | |
| 1051 | 1924 |
| 1926 | |
| 1927 | |
| 1058 |
内容的提问来源于stack exchange,提问作者Parsyk
相关产品推荐
相关产品推荐

