sql to python: как сгруппировать список словарей

1

У меня есть большой список идентификаторов элементов, которые я ввел в список словарей:

[
{ '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
    я бы предположил, что вы могли бы проверить панд и NumPy
Теги:

1 ответ

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.

  • 0
    Я не уверен, что вы имеете в виду с колоннами NaN. Вы имеете в виду, когда product1 или item1 не существует (NaN), верно? В противном случае я не вижу, как существование product2 item2 должно изменить счет.
  • 0
    Да, это то, что я имел в виду. В этом примере это не имеет значения, я просто хотел указать, что количество относится к числу не-NaN элементов, а не строк.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню