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()
再次感谢。再一次。