想要为列中的一系列 0 生成一个计数器

Want to generate a counter for a series of 0s in a column

为了清楚说明我的数据有温度值,当传感器没有记录任何值时,它会给出连续的 0。我的时间间隔以毫秒为单位,每次都会给我一串 0。当一串 0 出现时,我希望计数器从 1 增加到 2 再到 3 等等。

本质上,我想要如下所示的计数器列

No. Temp Count
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

但必须有更简单的方法。此外,如果我的温度值恰好符合此逻辑,这可能会造成混乱。

您可以使用简单的布尔值来跟踪最后一个值是否为零,并在值停止变为零时递增计数器。

我看到您使用了 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