【问题标题】:Can I select rows based on group size with pandas? Or do I have to use SQL?我可以使用 pandas 根据组大小选择行吗?还是我必须使用 SQL?
【发布时间】:2014-05-08 08:36:28
【问题描述】:

有了 pandas,我可以使用 df.groupby('product_name').size() 进行分组。但是,如果我只对“product_name”唯一的行感兴趣,即那些 groupby.size 等于 1 的记录,我如何过滤 df 以仅查看这些行?换句话说,我可以根据属性在数据库中出现的次数使用 pandas 对数据库执行过滤吗? (我可以用 SQL 做到这一点。)

【问题讨论】:

标签: python pandas


【解决方案1】:

我发现transform 对于非常大的数据帧比filter 更有效率:

row_group_sizes = (
    df['product_name']
    .groupby(df['product_name'])
    .transform('size')
)

df[row_group_sizes==1]

或者,在一行中:

df[df['product_name'].groupby(df['product_name']).transform('size')==1]

【讨论】:

    【解决方案2】:

    我已经使它与records.groupby('product_name').filter(lambda x: len(x['url']) == 1) 一起工作。请注意,仅使用 len(x) 是行不通的。对于具有多于两列的数据框(这可能是现实生活中的大多数数据框),必须为 x 指定一列:任何列,但要分组的列除外。此外,此代码最初对我不起作用,因为我在数据帧上的索引不是唯一的。我不确定为什么这会干扰过滤功能,但确实如此。重新索引数据框后,我终于让它工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-26
      • 1970-01-01
      • 1970-01-01
      • 2016-12-01
      • 2012-05-06
      • 2013-10-05
      相关资源
      最近更新 更多