【问题标题】:How to filter out values from a pandas data frame for which only one occurrence exists如何从仅存在一次的熊猫数据框中过滤掉值
【发布时间】:2025-12-17 19:45:01
【问题描述】:

我有一个 Pandas 数据框,其中包含以下列和值

  Temp  Time grain_size
0 335.0 25.0 14.8
1 335.0 30.0 18.7
2 335.0 35.0 22.1
3 187.6 25.0 9.8
4 227.0 25.0 14.2
5 227.0 30.0 16.2
6 118.5 25.0 8.7

给定变量名称df的数据框具有三个不同的值,分别是335.0187.6227.0118.5;但是,值 187.6118.5 只出现一次。我想过滤数据框,使其摆脱只出现一次的值,使最终的数据框看起来像。

  Temp  Time grain_size
0 335.0 25.0 14.8
1 335.0 30.0 18.7
2 335.0 35.0 22.1
4 227.0 25.0 14.2
5 227.0 30.0 16.2

显然,在这个简单的案例中,我知道只出现一次的值,我可以简单地使用过滤函数来清除它们。但是,我想自动化这个过程,以便 Python 将确定哪些值只出现一次并自动过滤它们。如何启用此功能?

【问题讨论】:

    标签: python-3.x pandas dataframe


    【解决方案1】:

    使用duplicated

    df[df.Temp.duplicated(keep=False)]
    Out[630]: 
        Temp  Time  grain_size
    0  335.0  25.0        14.8
    1  335.0  30.0        18.7
    2  335.0  35.0        22.1
    4  227.0  25.0        14.2
    5  227.0  30.0        16.2
    

    【讨论】:

      【解决方案2】:

      试试这个

      df['count']=df.groupby(['Temp']).transform(pd.Series.count)
      df = df[df['count']>1]
      df.drop(['count'],axis=1,inplace=True)
      

      【讨论】:

        【解决方案3】:

        dict

        这是dict 处理WeNYoBen 所做的相同事情的方法

        seen = {}
        for t in df.Temp:
            seen[t] = t in seen
        
        df[df.Temp.map(seen)]
        
            Temp  Time  grain_size
        0  335.0  25.0        14.8
        1  335.0  30.0        18.7
        2  335.0  35.0        22.1
        4  227.0  25.0        14.2
        5  227.0  30.0        16.2
        

        【讨论】:

          最近更新 更多