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

时间:2018-09-03 13:46:43

标签: python pandas dataframe

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

df['On/Off'] = np.where(df[col] > value, 'On', 'Off')

将信号标记为打开或关闭(根据信号源设置value)。以下代码给出了示例数据帧,尽管没有实际的测量数据:

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列在row n读为'off',然后在{{1}读为'on' }应该是这种方法,如:

row_n+1

我当前的计划来自对此(Pandas iterate over DataFrame row pairs)的答案

我认为i =0 # <--- number of on/off pairings if cycle = [row_n]='On'; [row_n+1]='Off': i=+1 提供了一条可能的路线,生成2个数据帧,然后比较行的不匹配情况,但感觉可能有一种更简单的方法,可能使用itertools或pd.iterrows(等)。 / p>

与往常一样,我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

shifteq(==)用作比较值,将布尔掩码和最后一个计数Promise.all链接const p1 = fetch(url,{ method: 'GET' }) const p2 = fetch(url2,{ method: 'GET' }) Promise.all([p1, p2]).then(values => { // here you have an array of reponses console.log(values); })

True

另一种解决方案:

sum

详细信息:

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