删除在 DataFrame 列中仅出现一次的值

Posted

技术标签:

【中文标题】删除在 DataFrame 列中仅出现一次的值【英文标题】:Remove values that appear only once in a DataFrame column 【发布时间】:2016-01-09 08:17:16 【问题描述】:

我在x 列中有一个具有不同值的数据框。我想删除在一列中只出现一次的值。

所以这个:

   x
1 10
2 30
3 30
4 40
5 40
6 50

应该变成这样:

   x
2 30
3 30
4 40
5 40

我想知道是否有办法做到这一点。

【问题讨论】:

您要删除整行还是将值替换为 NaN? 结帐:pandas.pydata.org/pandas-docs/stable/generated/… @rurp 我想删除整行,但是用 NaN 替换值也能帮到我。 【参考方案1】:

您可以使用groupbytransform 轻松获得此信息:

In [1]: import pandas as pd

In [2]: df = pd.DataFrame([10, 30, 30, 40, 40, 50], columns=['x'])

In [3]: df = df[df.groupby('x').x.transform(len) > 1]

In [4]: df
Out[4]: 
    x
1  30
2  30
3  40
4  40

【讨论】:

【参考方案2】:

您可以使用groupby 然后filter 它:

In [9]:    
df = pd.DataFrame([10, 30, 30, 40, 40, 50], columns=['x'])
df = df.groupby('x').filter(lambda x: len(x) > 1)
df

Out[9]:
    x
1  30
2  30
3  40
4  40

【讨论】:

【参考方案3】:

如何更明确地保留所有重复值:

df = df.loc[df.duplicated(subset='x', keep=False), :]

相反,只保留唯一值:

df = df.loc[~df.duplicated(subset='x', keep=False), :]

还有这个:

df = df.loc[~df.duplicated(subset='x'), :]

相当于:

df = df.drop_duplicates(subset='x')

【讨论】:

这比接受的答案要快得多。

以上是关于删除在 DataFrame 列中仅出现一次的值的主要内容,如果未能解决你的问题,请参考以下文章

在一列中选择该值未在另一列中出现 5 次的值

数组中只出现一次的数字

C++信奥赛题目——第一个只出现一次的值

查找表中恰好出现一次的值

剑指offer:数组中只出现一次的数字

剑指offer:数组中只出现一次的数字