sql到python:如何分组词典列表

时间:2018-09-26 08:55:17

标签: python

我在词典列表中有大量的项目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中翻译的最困难的事情。

1 个答案:

答案 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,这将很有帮助。