我有一个类似于下面的DataFrame。我正在尝试计算从False切换到True的滚动次数。
Time True/False
1 0
2 1
3 1
4 0
5 0
6 0
7 1
8 1
9 0
10 1
11 0
下面的代码是我使用```numpy.where想到的,但是我没有得到想要的结果。
Test['RollingCount'] = np.where(Test['True/False'] == 0, Test['RollingCount'].shift(1),
np.where((Test['True/False'] == 1) & (Test['True/False'].shift(1) == 1), Test['RollingCount'].shift(1),
np.where((Test['True/False'] == 1) & (Test['True/False'].shift(1) == 0), (Test['RollingCount'].shift(1) + 1),
np.where(Test['True/False'] == 1, 1, 0))))
以下是我要完成的输出。知道我在做什么错吗?有更好的方法来解决这个问题吗?
Time True/False RollingCount
1 0 0
2 1 1
3 1 1
4 0 1
5 0 1
6 0 1
7 1 2
8 1 2
9 0 2
10 1 3
11 0 3
答案 0 :(得分:1)
IIUC:
df['RollingCount'] = df['True/False'].diff(-1).eq(1).cumsum()
输出:
0 0
1 0
2 1
3 1
4 1
5 1
6 1
7 2
8 2
9 3
10 3
Name: True/False, dtype: int32
答案 1 :(得分:0)
在numpy中,您可以使用diff
和cumsum
来做到这一点:
d = np.concatenate(([0], np.diff(tf)))
result = np.cumsum(d[d > 0])