Счетчик для списка в Python

У меня есть такой список.

listt =[[' 2020-06-12  00:00:00+03:00 ',' 91.5','91.9','91.9','91.9','92.55','92.55','92.1','93.3','93.3 '],
    [' 2020-06-13  00:00:00+03:00 ',' 91.6','91.6','92.85','92.85','92.85','92.85','92.3','92.3','92.1','92.1','94.1',],
    [' 2020-06-14  00:00:00+03:00 ',' 91.5','91.5','91.65','91.65','91.5','92.9','92.9 '],
    [' 2020-06-15  00:00:00+03:00 ',' 91.85','91.85','91.6','91.85','91.85','92.55','92.4','92.4','93.7','93.7','93.35','93.35 '],
    [' 2020-06-16  00:00:00+03:00 ',' 91.6','91.6','91.3','91.3','92.75','92.75','92.15','92.15','93.15','93.15','92.9']]

Я хочу распечатать ежедневное количество уникальных измерений в порядке убывания по дате.

Мой ожидаемый результат

Счетчик для списка в Python

Я использую счетчик. Но это не делает group by.

c = collections.Counter(daily_weights)

Непонятно, чего вы пытаетесь достичь. Каков именно ваш ожидаемый результат? Counter требует, чтобы все, что вы пытаетесь посчитать, было хешируемым. Элементы списка не хэшируются. Как это обойти сложно сказать, потому что опять же непонятно, чего вы хотите

juanpa.arrivillaga 13.12.2020 08:45
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
65
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

IIUC, вам не нужен счетчик для этой задачи. Просто делать:

import pprint
from operator import itemgetter

listt = [[' 2020-06-12  00:00:00+03:00 ', ' 91.5', '91.9', '91.9', '91.9', '92.55', '92.55', '92.1', '93.3', '93.3 '],
         [' 2020-06-13  00:00:00+03:00 ', ' 91.6', '91.6', '92.85', '92.85', '92.85', '92.85', '92.3', '92.3', '92.1',
          '92.1', '94.1', ],
         [' 2020-06-14  00:00:00+03:00 ', ' 91.5', '91.5', '91.65', '91.65', '91.5', '92.9', '92.9 '],
         [' 2020-06-15  00:00:00+03:00 ', ' 91.85', '91.85', '91.6', '91.85', '91.85', '92.55', '92.4', '92.4', '93.7',
          '93.7', '93.35', '93.35 '],
         [' 2020-06-16  00:00:00+03:00 ', ' 91.6', '91.6', '91.3', '91.3', '92.75', '92.75', '92.15', '92.15', '93.15',
          '93.15', '92.9']]

# count number of unique measurements
counts = ((head, len(set(tail))) for head, *tail in listt)

# sort the list in descending order based on the count of unique measurements
res = sorted(counts, key=itemgetter(1), reverse=True)

pprint.pprint(res)

Выход

[(' 2020-06-15  00:00:00+03:00 ', 8),
 (' 2020-06-16  00:00:00+03:00 ', 7),
 (' 2020-06-12  00:00:00+03:00 ', 6),
 (' 2020-06-13  00:00:00+03:00 ', 6),
 (' 2020-06-14  00:00:00+03:00 ', 5)]

Выражение генератора :

# count number of unique measurements
counts = ((head, len(set(tail))) for head, *tail in listt)

будет подсчитывать количество уникальных измерений в день. Затем просто отсортируйте, используя это число в порядке убывания.

# sort the list in descending order based on the count of unique measurements
res = sorted(counts, key=itemgetter(1), reverse=True)

Лучше всего использовать здесь pandas. Он более удобочитаем, ремонтопригоден и масштабируем. Кроме того, он имеет внутреннюю поддержку даты и времени, если вы когда-либо хотели изменить формат столбца даты.

import pandas as pd 

l1 =[[' 2020-06-12  00:00:00+03:00 ',' 91.5','91.9','91.9','91.9','92.55','92.55','92.1','93.3','93.3 '],
    [' 2020-06-13  00:00:00+03:00 ',' 91.6','91.6','92.85','92.85','92.85','92.85','92.3','92.3','92.1','92.1','94.1',],
    [' 2020-06-14  00:00:00+03:00 ',' 91.5','91.5','91.65','91.65','91.5','92.9','92.9 '],
    [' 2020-06-15  00:00:00+03:00 ',' 91.85','91.85','91.6','91.85','91.85','92.55','92.4','92.4','93.7','93.7','93.35','93.35 '],
    [' 2020-06-16  00:00:00+03:00 ',' 91.6','91.6','91.3','91.3','92.75','92.75','92.15','92.15','93.15','93.15','92.9']]

df = pd.DataFrame(l1)
df.columns = ["date"] + ["M{}".format(i) for i in range(1, len(df.columns))]

df = df.set_index(["date"])
res=df.nunique(axis=1)
res.sort_values(axis=0, ascending=False, inplace=True)

print(res)

вывод будет:

date
 2020-06-15  00:00:00+03:00     8
 2020-06-16  00:00:00+03:00     7
 2020-06-13  00:00:00+03:00     6
 2020-06-12  00:00:00+03:00     6
 2020-06-14  00:00:00+03:00     5
dtype: int64

Использование pandas не является лучшей практикой и не более читабельно (вам нужно знать pandas для понимания решения)

Dani Mesejo 13.12.2020 09:21

Другие вопросы по теме