【问题标题】:Filtering rows that have unique value in a column using pandas使用熊猫过滤列中具有唯一值的行
【发布时间】:2022-01-22 04:42:23
【问题描述】:

我有一个df

id      value
1       10
2       15
1       10
1       10
2       13
3       10
3       20

我试图只保留 value 列中具有 1 个唯一值的行,以便结果 df 如下所示:

id      value
1       10
1       10
1       10

我删除了id = 2, 3,因为它在value15, 13 & 10, 20 列中分别有多个唯一值。

I read this answer. 但这只是删除了重复项,而我想检查给定列是否 - 在本例中,列 value 具有超过 1 个唯一值。

我试过了:

df['uniques'] = pd.Series(df.groupby('id')['value'].nunique())

但这会为每一行返回nan,因为我试图在分组后将n 返回到n+m 行。我可以编写一个函数并将其应用于每一行,但我想知道是否有一个智能快速过滤器可以实现我的目标。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    使用transform 和 groupby 将组值与各个行对齐:

    df['nuniques'] = df.groupby('id')['value'].transform('nunique')
    

    输出:

       id  value  nuniques
    0   1     10         1
    1   2     15         2
    2   1     10         1
    3   1     10         1
    4   2     13         2
    5   3     10         2
    6   3     20         2
    

    如果您只需要过滤数据,则不需要分配新列:

    df[df.groupby('id')['value'].transform('nunique') == 1]
    

    【讨论】:

      【解决方案2】:

      让我们做filter

      out = df.groupby('id').filter(lambda x : x['value'].nunique()==1)
      Out[6]: 
         id  value
      0   1     10
      2   1     10
      3   1     10
      

      【讨论】:

        猜你喜欢
        • 2020-06-15
        • 1970-01-01
        • 2015-01-14
        • 1970-01-01
        • 1970-01-01
        • 2022-12-06
        • 1970-01-01
        • 1970-01-01
        • 2020-11-12
        相关资源
        最近更新 更多