我有一个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>
与往常一样,我们将不胜感激。
答案 0 :(得分:1)
将shift
与eq
(==)用作比较值,将布尔掩码和最后一个计数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()