Python 在数据帧中的相邻行中查找开/关信号或值对

Python 在数据帧中的相邻行中查找开/关信号或值对,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个df包含行(有时数千行)数据,对应于一个数字信号。我添加了一个额外的列,使用: df['On/Off'] = np.where(df[col] > value, 'On', 'Off') 将信号标记为打开或关闭(值根据信号源设置)。以下代码给出了一个示例数据帧,尽管没有实际测量数据: df = pd.DataFrame({"Time/s" : np.arange(0,100,2), "On/Off" : ("Off")}) df.at[10:13,"

我有一个
df
包含行(有时数千行)数据,对应于一个数字信号。我添加了一个额外的列,使用:

df['On/Off'] = np.where(df[col] > value, 'On', 'Off')
将信号标记为打开或关闭(
根据信号源设置)。以下代码给出了一个示例数据帧,尽管没有实际测量数据:

df = pd.DataFrame({"Time/s" : np.arange(0,100,2),
               "On/Off" : ("Off")})
df.at[10:13,"On/Off"] = "On"
df.at[40:43,"On/Off"] = "On"
df.at[47:,"On/Off"] = "On"
我想数一数信号记录为开启的次数。对于上面的代码,结果将是2(理想情况下返回索引)

考虑到数据帧的组织方式,我认为向下搜索行并查找列
on/off
行n
处读作“off”的行对,然后在
行n+1
处读作“on”应该是一种方法,如下所示:

i =0  # <--- number of on/off pairings

if cycle = [row_n]='On'; [row_n+1]='Off':
    i=+1
i=0#与(=)一起使用用于比较值,通过
sum
将布尔掩码和最后一次计数链接为
True
s:

out = (df['On/Off'].shift(-1).eq('Off') & df['On/Off'].eq('On')).sum()
另一个解决方案:

out = (df['On/Off'].shift().eq('On') & df['On/Off'].eq('Off')).sum()

print (out )
2

详情:

print ((df['On/Off'].shift().eq('On') & df['On/Off'].eq('Off')))

0     False
1     False
2     False
3     False
4     False
5     False
6     False
7     False
8     False
9     False
10    False
11    False
12    False
13    False
14     True
15    False
16    False
17    False
18    False
19    False
20    False
21    False
22    False
23    False
24    False
25    False
26    False
27    False
28    False
29    False
30    False
31    False
32    False
33    False
34    False
35    False
36    False
37    False
38    False
39    False
40    False
41    False
42    False
43    False
44     True
45    False
46    False
47    False
48    False
49    False
Name: On/Off, dtype: bool

太好了——再次感谢你。很高兴我使用的是
shift
;我的代码不是一行代码!!啦啦队你会用df.groupby()应用这个吗?使用
s=(df['On/Off'].shift().eq('On')和df['On/Off'].eq('Off'))
然后使用
df=s.groupby(df['group']).sum().reset_index()
再次感谢。再一次。