У меня есть большой список идентификаторов элементов, которые я ввел в список словарей:
[
{ '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.
Вы можете использовать для этого панды:
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
.