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

Fra*_*cía 5 python filtering dataframe pandas

我的列中包含不同值的数据框x.我想删除在列中只出现一次的值.

所以这:

   x
1 10
2 30
3 30
4 40
5 40
6 50
Run Code Online (Sandbox Code Playgroud)

应该变成这样:

   x
2 30
3 30
4 40
5 40
Run Code Online (Sandbox Code Playgroud)

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

Jim*_*ard 13

你可以通过使用groupby和轻松获得transform:

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
Run Code Online (Sandbox Code Playgroud)


EdC*_*ica 6

您可以使用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
Run Code Online (Sandbox Code Playgroud)


THN*_*THN 6

一种更明确的方法来保留所有重复的值怎么样:

df = df.loc[df.duplicated(subset='x', keep=False), :]
Run Code Online (Sandbox Code Playgroud)

相反,仅保留唯一值:

df = df.loc[~df.duplicated(subset='x', keep=False), :]
Run Code Online (Sandbox Code Playgroud)

和这个:

df = df.loc[~df.duplicated(subset='x'), :]
Run Code Online (Sandbox Code Playgroud)

相当于:

df = df.drop_duplicates(subset='x')
Run Code Online (Sandbox Code Playgroud)