我可以用pandas根据组大小选择行吗?还是必须使用SQL?

0 投票
2 回答
3653 浏览
提问于 2025-04-18 00:21

在使用pandas的时候,我可以通过 df.groupby('product_name').size() 来进行分组。但是如果我只想要那些“product_name”是唯一的行,也就是说那些分组后数量为一的记录,我该如何过滤数据框(df)来只显示这些行呢?换句话说,我能不能用pandas根据某个属性在数据库中出现的次数来进行过滤?(我用SQL可以做到这一点。)

2 个回答

2

我发现对于非常大的数据表,使用 transformfilter 要高效得多:

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]
1

我用 records.groupby('product_name').filter(lambda x: len(x['url']) == 1) 让它运行起来了。需要注意的是,单纯用 len(x) 是不行的。如果你的数据表有超过两列(这在实际数据中很常见),你必须为 x 指定一列:可以是任何列,但不能是你用来分组的那一列。此外,最开始这段代码对我没用,因为我数据表的索引不唯一。我也不太明白为什么这会影响过滤功能,但确实是这样。在重新设置了数据表的索引后,我终于让它正常工作了。

撰写回答