Python 查找非零数字的位置和大小

Python find location and size of non zero numbers

我有一个包含以下元素的数据框:

1/2/2010 5:00   0
1/2/2010 6:00   0
1/2/2010 7:00   0
1/2/2010 8:00   0
1/2/2010 9:00   5
1/2/2010 10:00  0
1/2/2010 11:00  2
1/2/2010 12:00  51
1/2/2010 13:00  68
1/2/2010 14:00  58
1/2/2010 15:00  0
1/2/2010 16:00  0
1/2/2010 17:00  0
1/2/2010 18:00  60
1/2/2010 19:00  24
1/2/2010 20:00  24
1/2/2010 21:00  0
1/2/2010 22:00  0

我想找到所有非零数字簇的频率以及该簇中第一个非零元素的位置。

对于上述数组,我希望答案为:

Location        NumOfInstances
1/2/2010 9:00   1
1/2/2010 11:00  4
1/2/2010 18:00  3

我不知道该怎么做。即使使用 for 循环,这也会很快变得复杂。

假设一个名为 s

的系列

Pandas

m = s.eq(0)
g = m.cumsum()[~m]
g.groupby(g).transform('size').drop_duplicates()

2010-01-02 09:00:00    1
2010-01-02 11:00:00    4
2010-01-02 18:00:00    3
dtype: int64

麻木

实验性

m = s.values == 0
w = np.flatnonzero(np.diff(np.append(True, m)))
pd.Series(np.diff(w)[::2], s.index[w[::2]])

2010-01-02 09:00:00    1
2010-01-02 11:00:00    4
2010-01-02 18:00:00    3
dtype: int64