如何在Pandas DataFrame中找出仅出现一次的行
提取DataFrame中仅出现一次的行(无需指定列名)
问题场景
你有如下Pandas DataFrame:
import pandas as pd student_dict = { "ID":[101,102,103,104,105,101,102,103,104,105,106,107], "Student":["AAA","BBB","CCC","DDD","EEE","AAA","BBB","CCC","DDD","EEE","YYY","ZZZ"], "Mark":[50,100,99,60,80,50,100,99,60,80,100,80], "Address":["St.AAA","St.BBB","St.CCC","St.DDD","St.EEE","St.AAA","St.BBB","St.CCC","St.DDD","St.EEE","St.AYE","St.ZZZ"], "PhoneNo":[1111111111,2222222222,3333333333,4444444444,5555555555,1111111111,2222222222,3333333333,4444444444,5555555555,6666666666,7777777777] } df = pd.DataFrame(student_dict)
其中大部分行存在重复,仅ID为106、107的行是唯一的。使用df.drop_duplicates()会保留重复行的首次出现记录+唯一行,但你需要仅提取整个行仅出现一次的结果:
ID Student Mark Address PhoneNo 106 YYY 100 St.AYE 6666666666 107 ZZZ 80 St.ZZZ 7777777777
需要一种无需指定列名、直接基于整行判断的方法提取这些唯一行。
解决方案
方法1:利用duplicated(keep=False)高效筛选
duplicated(keep=False)会把所有重复出现的行(包括首次和后续的重复项)标记为True,取反后就能得到仅出现一次的行:
# 筛选仅出现一次的行 unique_rows = df[~df.duplicated(keep=False)] print(unique_rows)
该方法性能最优,适合处理大数据量的DataFrame。
方法2:通过行频次统计筛选
先将每行转为元组统计出现次数,再筛选频次为1的行:
# 统计每行的出现频次 row_counts = df.apply(tuple, axis=1).value_counts() # 筛选出频次为1的行对应的元组 unique_tuples = row_counts[row_counts == 1].index # 匹配原DataFrame中的对应行 unique_rows = df[df.apply(tuple, axis=1).isin(unique_tuples)] print(unique_rows)
该方法更直观,可先查看所有行的重复频次,再做筛选。
内容的提问来源于stack exchange,提问作者Aks3
相关产品推荐
相关产品推荐

