Pandas根据字段(列)查看具体有哪些重复的数据

1.场景描述

近日,在进行数据整理时,需要根据某些列来找出具体重复的数据有哪些,废话不多说,先把图放上先。

import pandas as pd
test_df=pd.DataFrame({'name':['张三','李四','王五','张三','李四','王五','张三'],
                     'level':[10,3,8,14,2,3,18],
                      'info':['吵闹','安静','中等','吵闹','安静','安静','吵闹'],
                      'change_times':[1,2,3,1,2,4,9]
                     })
test_df

数据截图:
数据帧
需要根据name和info两个字段,找出重复的数据,结果如下:
结果

2.实现方法

2.1 方法1

利用groupby查看重复情况,然后进行merge操作.该方法可以查看具体重复的个数,还可以灵活更改重复次数来筛选数据。

df1=test_df.groupby(["name","info"]).size()
col=df1[df1>1].reset_index()[["name","info"]]
pd.merge(col,test_df,on=["name","info"])

输出结果如下:
方法1

2.2 方法2

先取出重复的字段,然后生成唯一的name列和info列,再进行merge。

df1=test_df[test_df.duplicated(subset=cols)].drop_duplicates(cols)[cols]
pd.merge(df1,test_df,on=cols,how="left")

实现截图:
方法2

2.3 方法3

获取重复索引,然后取交集,然后筛选出来。该方法保留了原来的索引,缺点是数据原索引不能有重复。

index1=test_df[test_df[["name","info"]].duplicated(keep="last")].index
index2=test_df[test_df[["name","info"]].duplicated(keep="first")].index
test_df.loc[index1 | index2,:]

截图如下:
方法3

2.4 方法4

先获取所有索引,然后去除不重复的索引,即差集,然后筛选出来。该方法也可以保留原来的索引,缺点也是数据原索引不能有重复。

test_df.loc[set(test_df.index) -set(test_df.drop_duplicates(subset=["name","info"],keep=False).index),:]

结果如下:
方法4

2.5 方法5

网友提供的方法,该方法可以保存原始索引,在数据原索引重复的情况下也可以使用。

#写法1
 test_df[test_df[["name","info"]].duplicated(keep=False)]
 #写法2
 test_df[test_df.duplicated(subset=["name","info"],keep=False)] 

完整代码如下:

import pandas as pd
test_df=pd.DataFrame({'name':['张三','李四','王五','张三','李四','王五','张三'],
                     'level':[10,3,8,14,2,3,18],
                      'info':['吵闹','安静','中等','吵闹','安静','安静','吵闹'],
                      'change_times':[1,2,3,1,2,4,9]
                     })
test_df

#方法1
cols=["name","info"]
df1=test_df.groupby(cols).size()
col=df1[df1>1].reset_index()[cols]
pd.merge(col,test_df,on=cols)

#方法2
df1=test_df[test_df.duplicated(subset=cols)].drop_duplicates(cols)[cols]
pd.merge(df1,test_df,on=cols,how="left")

#方法3
index1=test_df[test_df[cols].duplicated(keep="last")].index
index2=test_df[test_df[cols].duplicated(keep="first")].index
test_df.loc[index1 | index2,:]

#方法4
test_df.loc[set(test_df.index) -set(test_df.drop_duplicates(subset=cols,keep=False).index),:]
#方法5
 #写法1
 test_df[test_df[["name","info"]].duplicated(keep=False)]
 #写法2
 test_df[test_df.duplicated(subset=["name","info"],keep=False)] 

3.后记

上述方法各有优劣,具体使用哪个方法,看业务场景和个人喜好啦。如果你们还有更好的方法,欢迎私聊我或者给我留言~
pandas的使用,可以看我另外一篇:Pandas参考手册、常用函数及方法汇总

### 如何使用 Pandas 检查某一重复数据处理过程中,检查某是否存在重复项是一个常见的需求。Pandas 提供了多种方法来实现这一功能。 #### 使用 `duplicated` 函数检测重复 为了检查 DataFrame 中某一是否有重复,可以利用 `pandas.DataFrame.duplicated()` 方法[^1]。此函数返回一个布尔 Series,表示每一是否为重复,默认情况下会标记除了第一次出现外的所有重复实例为 True。 对于只关注特定的情况,可以通过传递子集参数给 duplicated 来指定要检查哪几: ```python import pandas as pd data = {'A': ['foo', 'bar', 'foo', 'baz'], 'B': [1, 2, 3, 4]} df = pd.DataFrame(data) # 查看'A'中是否有重复条目 repeated_entries_A = df['A'].duplicated() print(repeated_entries_A) ``` 上述代码将输出 A 中各元素首次之后再次出现的位置为 True 的序。 #### 统计每种取的数量并找出重复次数大于一次的项目 另一种方式是先计算该不同各自的频数再筛选出那些频率超过了一次的键对。这可通过 value_counts() 实现: ```python value_frequencies = df['A'].value_counts() # 获取所有出现多于一次的唯一及其对应的数量 duplicate_values = value_frequencies[value_frequencies > 1] print(duplicate_values) ``` 这段脚本能够给出具体哪些出现了多次以及它们各自的具体数目。 #### 删除含有重复 当确认存在不需要保留下来的冗余记录时,则可以直接调用 drop_duplicates() 去除这些多余的副本。同样支持针对单个或者多个字段做去重操作。 ```python cleaned_df = df.drop_duplicates(subset=['A']) print(cleaned_df) ``` 以上三种手段可以帮助有效地识别和管理数据集中存在的重复现象。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

theskylife

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值