【发布时间】:2013-02-21 06:15:11
【问题描述】:
我有一个pandas.DataFrame,其中包含一个名为name 的列,其中包含字符串。
我想获得在列中多次出现的名称列表。我该怎么做?
我试过了:
funcs_groups = funcs.groupby(funcs.name)
funcs_groups[(funcs_groups.count().name>1)]
但它不会过滤掉单例名称。
【问题讨论】:
我有一个pandas.DataFrame,其中包含一个名为name 的列,其中包含字符串。
我想获得在列中多次出现的名称列表。我该怎么做?
我试过了:
funcs_groups = funcs.groupby(funcs.name)
funcs_groups[(funcs_groups.count().name>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
【讨论】:
我遇到了类似的问题并遇到了这个答案。
我想这也有效:
counts = df.groupby('name').size()
df2 = pd.DataFrame(counts, columns = ['size'])
df2 = df2[df2.size>1]
df2.index 会给你一个重复的名字列表
【讨论】:
一个班轮可以是:
x.set_index('name').index.get_duplicates()
索引包含查找重复的方法,列似乎没有类似的方法..
【讨论】:
index.get_duplicates() 是 deprecated,因为 v0.23
另一个班轮可以是:
(df.name).drop_duplicates()
【讨论】:
value_counts 也会给你重复的数量。
names = df.name.value_counts()
names[names > 1]
【讨论】:
给出的大多数回复都演示了如何删除重复项,而不是找到它们。
以下将选择数据框中的 每个 行,其中包含重复的 'name' 字段。请注意,这将找到 each 实例,而不仅仅是在第一次出现后重复。 keep 参数接受可以排除第一次或最后一次出现的附加值。
df[df.duplicated(['name'], keep=False)]
duplicated() 的 pandas 参考可以在 here 找到。
【讨论】: