我在词典列表中有大量的项目ID:
[
{ 'product1': 2, 'item1':4,'product2':333,'item2':222},
{ 'product1': 1, 'item1':123,'product2':333,'item2':222},
{ 'product1': 3, 'item1':433,'product2':333,'item2':222},
{ 'product1': 3, 'item1':433,'product2':333,'item2':224},
]
我需要检查该值的生成是否运作良好并通常建立一些统计信息。
一种慢速的方法是将所有内容保存在数据库(SQLite)上并使用SQL。例如:
select *, count(*) as cnt from the mytable group by product1,item1 order by cnt desc;
我想知道python中是否有更快的方法可以执行与该SQL相同的操作。我基本上需要能够过滤数据,而上面的SQL似乎是我必须在python3中翻译的最困难的事情。
答案 0 :(得分:1)
您可以为此使用熊猫:
import pandas
data = [
{ 'product1': 2, 'item1':4,'product2':333,'item2':222},
{ 'product1': 1, 'item1':123,'product2':333,'item2':222},
{ 'product1': 3, 'item1':433,'product2':333,'item2':222},
{ 'product1': 3, 'item1':433,'product2':333,'item2':224},
]
df = pandas.DataFrame(data)
grouped = df.groupby(['product1', 'item1']).count()
sorted = grouped.sort_values('item2', ascending=False)
这不会给您一个cnt
列,但是所有不在group-by子句中的列都将包含计数。如果不同的列包含NaN
,这将很有帮助。