如何使用熊猫查找重复名称?

Posted

技术标签:

【中文标题】如何使用熊猫查找重复名称?【英文标题】:How to find duplicate names using pandas? 【发布时间】:2013-02-21 06:15:11 【问题描述】:

我有一个pandas.DataFrame,其中包含一个名为name 的列,其中包含字符串。 我想获得在列中多次出现的名称列表。我该怎么做?

我试过了:

funcs_groups = funcs.groupby(funcs.name)
funcs_groups[(funcs_groups.count().name>1)]

但它不会过滤掉单例名称。

【问题讨论】:

【参考方案1】:

如果您想查找名称重复的行(我们第一次看到的除外),您可以试试这个

In [16]: import pandas as pd
In [17]: p1 = 'name': 'willy', 'age': 10
In [18]: p2 = 'name': 'willy', 'age': 11
In [19]: p3 = 'name': 'zoe', 'age': 10
In [20]: df = pd.DataFrame([p1, p2, p3])

In [21]: df
Out[21]: 
   age   name
0   10  willy
1   11  willy
2   10    zoe

In [22]: df.duplicated('name')
Out[22]: 
0    False
1     True
2    False

【讨论】:

我比我更喜欢这个。【参考方案2】:

我遇到了类似的问题并遇到了这个答案。

我想这也有效:

counts = df.groupby('name').size()
df2 = pd.DataFrame(counts, columns = ['size'])
df2 = df2[df2.size>1]

df2.index 会给你一个重复的名字列表

【讨论】:

最好使用 df2['size'] 而不是 df2.size,因为 df2.size 是一个内置函数。【参考方案3】:

一个班轮可以是:

x.set_index('name').index.get_duplicates()

索引包含查找重复的方法,列似乎没有类似的方法..

【讨论】:

这正是我所需要的。谢谢@idoda! 这个“set_index()”是否会破坏名为 x 的原始数据帧的索引?我应该在数据帧的副本上运行此命令吗? 请注意,index.get_duplicates() 是 deprecated,因为 v0.23【参考方案4】:

另一个班轮可以是:

(df.name).drop_duplicates()

【讨论】:

【参考方案5】:

value_counts 也会给你重复的数量。

names = df.name.value_counts()
names[names > 1]

【讨论】:

【参考方案6】:

给出的大多数回复都演示了如何删除重复项,而不是找到它们。

以下将选择数据框中的 每个 行,其中包含重复的 'name' 字段。请注意,这将找到 each 实例,而不仅仅是在第一次出现后重复。 keep 参数接受可以排除第一次或最后一次出现的附加值。

df[df.duplicated(['name'], keep=False)]

duplicated() 的 pandas 参考可以在 here 找到。

【讨论】:

以上是关于如何使用熊猫查找重复名称?的主要内容,如果未能解决你的问题,请参考以下文章

熊猫合并具有不同名称的列并避免重复[重复]

如何合并熊猫中的重复行?

如何在熊猫中使用具有多索引的地图?

熊猫:链式作业[重复]

如何使用熊猫在特定列中的csv文件中查找特定单词

如何正确使用熊猫打印前五行[重复]