如何筛选DataFrame中Value列存在重复值的所有行?
解决Pandas筛选Value列重复值行的问题
嗨,很高兴看到你开始探索Pandas啦!我明白你想把Value列里所有存在重复值的行都筛选出来,之前用groupby和.duplicated没得到预期结果,大概率是参数设置的问题,我来给你捋清楚。
首先先还原一下你的输入DataFrame(方便你直接复现测试):
import pandas as pd data = { 'Name': ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'], 'ID': ['NSW', 'NSW', 'VIC', 'NSW', 'VIC', 'NSW', 'VIC', 'NSW', 'VIC'], 'Date': ['19/05/2018']*9, 'Value': [290, 340, 340, 70, 130, 175, 260, 350, 350] } df = pd.DataFrame(data)
正确的筛选方法
你需要用duplicated()方法,关键是设置两个参数:
subset='Value':指定只基于Value列判断重复keep=False:把所有重复的行都标记为True(默认keep='first'只会标记除第一个重复行之外的其他行,这就是你之前可能没得到完整结果的原因)
直接一步到位筛选的代码:
# 筛选出所有Value列重复的行 result = df[df.duplicated(subset='Value', keep=False)] print(result)
运行后就能得到你想要的预期输出:
Name ID Date Value 1 b NSW 19/05/2018 340 2 c VIC 19/05/2018 340 7 h NSW 19/05/2018 350 8 i VIC 19/05/2018 350
如果想先标记再筛选(方便查看哪些是重复行),也可以这样写:
# 添加标记列 df['Duplicate'] = df.duplicated(subset='Value', keep=False) # 筛选出标记为True的行 result = df[df['Duplicate']]
这样就能完美得到你想要的结果啦,要是还有其他Pandas的小问题,随时来问~
内容的提问来源于stack exchange,提问作者Shahrukh Khalidi
相关产品推荐
相关产品推荐

