DataFrame通过两列查重,删除重复值,保留第一个出现的值或者最后一个出现的值:
import pandas as pd
# 创建示例DataFrame
data = {'A': ['abc', 'def', 'abc', 'ghi', 'def'],
'B': ['123', '456', '123', '789', '456'],
'C': [1, 2, 3, 4, 5]}
df = pd.DataFrame(data)
# 创建新列,表示A和B的组合
df['A_and_B'] = df[['A', 'B']].apply(lambda x: '_'.join(x), axis=1)
# 标记重复行,保留最后一个重复行
df['is_duplicate'] = df.duplicated(subset='A_and_B', keep='last')
# 筛选需要保留的行
df_unique = df[~df['is_duplicate']]
# 删除辅助列
df_unique = df_unique.drop(['A_and_B', 'is_duplicate'], axis=1)
# 打印结果
print(df_unique)
如果保留第一个出现的行,keep='first'
输出结果:
A B C
2 abc 123 3
3 ghi 789 4
4 def 456 5
这段代码的功能是根据'A'和'B'列的组合判断重复行,并保留最后一个重复行,同时删除辅助列,最终输出筛选后的结果。
逐行解释这段代码:
-
首先导入了pandas库,然后创建了一个示例的DataFrame,其中包含三列数据'A'、'B'和'C'。
-
接下来,通过使用
apply
方法和lambda
函数,将'A'和'B'列的值合并为一个新列'A_and_B'。apply
方法可以对DataFrame的列进行逐行操作,而lambda
函数用于将每一行的'A'和'B'值连接起来,并使用下划线分隔。 -
使用
duplicated
方法标记重复行,并通过设置keep='last'
参数来保留最后一个重复行。这将在DataFrame中创建一个名为'is_duplicate'的列,标记了每行是否为重复行,最后一个重复行将被标记为True
,其他重复行将被标记为False
。 -
使用布尔索引筛选出不是重复行的行,即选取'is_duplicate'列为
False
的行,将结果赋值给变量'df_unique'。这样就得到了保留最后一个重复行的DataFrame。 -
最后,使用
drop
方法删除辅助列'A_and_B'和'is_duplicate',并将最终结果存储在'df_unique'中。 -
最后一行代码打印输出了筛选后的结果。