我可以用pandas根据组大小选择行吗?还是必须使用SQL?
在使用pandas的时候,我可以通过 df.groupby('product_name').size()
来进行分组。但是如果我只想要那些“product_name”是唯一的行,也就是说那些分组后数量为一的记录,我该如何过滤数据框(df)来只显示这些行呢?换句话说,我能不能用pandas根据某个属性在数据库中出现的次数来进行过滤?(我用SQL可以做到这一点。)
2 个回答
2
我发现对于非常大的数据表,使用 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]
1
我用 records.groupby('product_name').filter(lambda x: len(x['url']) == 1)
让它运行起来了。需要注意的是,单纯用 len(x)
是不行的。如果你的数据表有超过两列(这在实际数据中很常见),你必须为 x 指定一列:可以是任何列,但不能是你用来分组的那一列。此外,最开始这段代码对我没用,因为我数据表的索引不唯一。我也不太明白为什么这会影响过滤功能,但确实是这样。在重新设置了数据表的索引后,我终于让它正常工作了。