【问题标题】:Remove values that appear only once in a DataFrame column删除在 DataFrame 列中仅出现一次的值
【发布时间】: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

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

【问题讨论】:

标签: python pandas filtering dataframe


【解决方案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')
      

      【讨论】:

      • 这比接受的答案要快得多。
      猜你喜欢
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 2019-12-14
      • 1970-01-01
      • 1970-01-01
      • 2019-05-06
      • 1970-01-01
      • 2016-08-25
      相关资源
      最近更新 更多