为了账号安全,请及时绑定邮箱和手机立即绑定

在熊猫数据框中的相邻行中寻找开/关信号或值对

在熊猫数据框中的相邻行中寻找开/关信号或值对

阿晨1998 2021-06-04 18:32:37
我有一个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读取为 'off' at row n,然后 'on' atrow_n+1应该是方法,如下所示:i =0  # <--- number of on/off pairingsif cycle = [row_n]='On'; [row_n+1]='Off':    i=+1我目前的计划来自对此的回答(Pandas 遍历 DataFrame 行对)我认为df.shift()提供了一个潜在的路线,生成 2 个数据帧,然后比较不匹配的行,但感觉可能有更简单的方法,可能使用 itertools 或 pd.iterrows(等)。
查看完整描述

1 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

使用shiftwith eq(==) 比较值,将 boolean mask 和 last count Trues by 链接起来sum:


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



查看完整回答
反对 回复 2021-06-09
  • 1 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号