#python #python-requests #counter
#python #python-запросы #счетчик
Вопрос:
Чтобы пояснить, что мои данные имеют значения температуры, и когда датчик не регистрирует никаких значений, он будет выдавать непрерывные 0 секунд. Мой интервал находится в мс, и это даст мне строку из 0 каждый раз. И когда появляется строка из 0, я хочу, чтобы счетчик увеличивался с 1 до 2, затем до 3 и так далее.
По сути, мне нужен столбец счетчика, как показано ниже
Нет. | Temp | Количество |
---|---|---|
1 | 80.0 | 0 |
2 | 81.6 | 0 |
3 | 0.00 | 0 |
4 | 0.00 | 0 |
5 | 0.00 | 0 |
6 | 81.6 | 1 |
7 | 80.0 | 0 |
8 | 83.7 | 0 |
9 | 0.00 | 0 |
10 | 0.00 | 0 |
11 | 0.00 | 0 |
12 | 81.6 | 1 |
13 | 81.6 | 0 |
14 | 80.0 | 0 |
15 | 83.7 | 0 |
16 | 0.00 | 0 |
17 | 0.00 | 0 |
18 | 0.00 | 0 |
19 | 81.6 | 1 |
Я думал о
df['count'] = df.groupby((df['col'] == df['col'].shift(2)).cumsum()).cumcount() 1
Но должен быть более простой способ. Кроме того, это может привести к путанице, если мои значения температуры совпадают с этой логикой.
Комментарии:
1. «это может привести к путанице, если мои значения температуры совпадают с этой логикой» будет верным для любого решения. Если температура на самом деле равна 0,00 градуса, как вы будете отличать это от «null»? Кроме этого … что не так с вашим текущим решением?
2. Мои температуры не приблизятся к 0C, так что этого не произойдет. У меня может быть больше чисел из 0. В этом решении, если у меня есть 6, счетчик переместится дважды.
3. Я думаю, что то, что вы на самом деле ищете, — это «восходящий край», т.Е. «обнаруживать всякий раз, когда ненулевой температуре предшествует ноль»
4. Кроме того, почему вы хотите это сделать? Вы хотите знать общее количество кластеров, равное нулю, которое было бы проще просто вычислить как общее количество, чем сохранять текущую сумму.
5. Я не знаю о количестве нулей, и они могут быть или не быть равными каждый раз. Это часть разработки датчика температуры / давления, который будет снимать данные в режиме реального времени.
Ответ №1:
Вы можете использовать простое логическое значение, чтобы отслеживать, было ли последнее значение нулевым или нет, и увеличивать счетчик всякий раз, когда значения перестают равняться нулю.
Я видел, что вы использовали PANDAS df, но поскольку в вашем вопросе говорилось, что вы будете использовать данные в реальном времени, я решил сохранить код неоднозначным, чтобы вы могли применить его к своему собственному варианту использования. Вместо итерации по списку с for
циклом вы можете разместить логику, которая подключается к вашему датчику. И, конечно, вы можете заменить оператор печати внизу на все, что вам нужно.
nums = [80.0, 81.6, 0.0, 0.0, 0.0, 81.6, 80.0, 83.7, 0.0, 0.0, 0.0, 81.6]
zeroCount = 1
isZero = False
for num in nums: #Can be whatever type of iteration you need
if num == 0:
isZero = True
if isZero:
if num != 0:
zeroCount = 1
isZero = False
print("%.1f %d" % (num, zeroCount))
Запуск этого кода приводит к выводу, который вы указали в своем вопросе:
80.0 1
81.6 1
0.0 1
0.0 1
0.0 1
81.6 2
80.0 2
83.7 2
0.0 2
0.0 2
0.0 2
81.6 3