019—pandas 计算实验仪器正常运行周期时长

需求:

对指定两个状态作为一个周期,并计算出周期内的差值,写到周期结束所在的行上。pandas 非常适合实现此类有着较为复杂逻辑的问题。

思路:

  • 这个问题的难点是状态的不规律性,如何才能准确找出所有 T 和 C 的周期。
  • 我们可以先将状态 T 和 C 筛选出来,然后剔除连续的 T 或者 C 中的无效的内容,最终形成一个规范的 T-C 列表。
  • 在规范的列表中求位差,最终保留 C 位置的值并增加 Delta 列。

使用步骤:

1.引入库

代码如下(示例):

import pandas as pd

2.读入数据

代码如下(示例):

df=pd.DataFrame(columns=['Status','t'])df['Status']=['A','T', 'A','C','C','A','T','T','C','A']
df['t']= pd.to_datetime(['2021-06-12 08:39:24.813000',
'2021-06-12 08:39:24.820000',
'2021-06-12 08:39:25.210000',
'2021-06-12 08:39:25.217000',
'2021-06-12 08:44:28.830000',
'2021-06-12 10:48:10.293000',
'2021-06-12 10:48:10.300000',
'2021-06-12 10:48:10.680000',
'2021-06-12 10:48:10.693000',
'2021-06-12 10:48:11.223000'])df
# 其中,状态列我们关注的是状态 T 和 C,T 表示机器触发开始运行,C 表示出现故障。需求期望增加 Delta 列来计算显示 T(触发)和 C(结束)状态之间的时间差,并将这个时间差显示在 C 对应的列上。
# 需要注意的是,状态 C 之后不经过 T 还可能出现状态 C,我们视 T 之后到第一个 C 之间为一个正常运行周期。

在这里插入图片描述

#增加两个辅助列,是不当前行的当是 T 下行是 C,是否当前行是 C 上行是 T:
(df.loc[df.Status.isin(['T', 'C'])].assign(nxt_C=lambda x: (x.Status == 'T') | (x.Status.shift() == 'C')).assign(pre_T=lambda x: (x.Status == 'C') | (x.Status.shift(-1) == 'T'))
)

在这里插入图片描述

#我们筛除两个辅助列分别为 True 之外的数据:
(df.loc[df.Status.isin(['T', 'C'])].assign(nxt_C=lambda x: (x.Status == 'T') | (x.Status.shift() == 'C')).assign(pre_T=lambda x: (x.Status == 'C') | (x.Status.shift(-1) == 'T')).loc[lambda x: ~((x.nxt_C==True) & (x.pre_T==True))]
)

在这里插入图片描述

#最后求时间列的位差:
temp = (df.loc[df.Status.isin(['T', 'C'])].assign(nxt_C=lambda x: (x.Status == 'T') | (x.Status.shift() == 'C')).assign(pre_T=lambda x: (x.Status == 'C') | (x.Status.shift(-1) == 'T')).loc[lambda x: ~((x.nxt_C== True) & (x.pre_T==True))].assign(Delta=lambda x: x.t - x.t.shift())
)
temp
# 这样就得到的数据状态 C 对应的 Delta 值就是我们要的数据。

在这里插入图片描述

#接下来,将这些数据写入原 df,我们采用了迭代的方式:
for index, row in temp.query('Status=="C"').iterrows():df.loc[index, 'Delta'] = row.Delta
df

在这里插入图片描述

总结

以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/492267.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Facebook的未来蓝图:数字社交的下一个篇章

在数字化时代,社交媒体已经成为人们日常生活中不可或缺的一部分。而在众多的社交媒体平台中,Facebook一直处于领先地位,不断探索着数字社交的新领域和新形式。随着科技的不断发展和社会的不断变革,Facebook正在谱写着数字社交的未…

备考2024年高考全国甲卷文科数学:历年选择题真题练一练

距离2024年高考还有三个多月的时间,最后这个时间,同学们基本上是以刷题为主。刷题的时候最重要的是把往年的真题吃透,因为真题是严格按照考纲出的,掌握了真题后面的知识点,并能举一反三地运用,那么高考的高…

matlab悬臂梁有限元分析

1、内容简介 略 47-可以交流、咨询、答疑 2、内容说明 略 建模说明 设计一个长方体的悬臂梁,长宽高分别为100m、10m和15m,材料特性为杨氏模量2e5,泊松比0.3, Matlab有限元分析(截图) 上图为悬臂梁的扰度…

有趣的CSS - 弹跳的圆

大家好,我是 Just,这里是「设计师工作日常」,今天分享的是用css写一个好玩的不停弹跳变形的圆。 《有趣的css》系列最新实例通过公众号「设计师工作日常」发布。 目录 整体效果核心代码html 代码css 部分代码 完整代码如下html 页面css 样式页…

Unity Shader - sahder变体剔除

文章目录 吐槽优化方案 - 目前最靠谱的方式shadercsharp 吐槽 我之所以单独写这边文章,是因为之前写的一篇: Unity Shader - Built-in管线下优化变体,编辑后,无法保存,一直提示:操作超时。 等了差不多 3…

【python】学习笔记03-循环语句

3.1 whlie循环的基础语法 - while循环的语法格式 - while循环的注意事项 条件需提供布尔类型结果,True继续,False停止 空格缩进不能忘 请规划好循环终止条件,否则将无限循环 """ 演示while循环基础练习题:求1-10…

普中51单片机学习(8*8LED点阵)

8*8LED点阵 实验代码 #include "reg52.h" #include "intrins.h"typedef unsigned int u16; typedef unsigned char u8; u8 lednum0x80;sbit SHCPP3^6; sbit SERP3^4; sbit STCPP3^5;void HC595SENDBYTE(u8 dat) {u8 a;SHCP1;STCP1;for(a0;a<8;a){SERd…

检索增强生成(RAG):从理论到 LangChain 实现

每日推荐一篇专注于解决实际问题的外文,精准翻译并深入解读其要点,助力读者培养实际问题解决和代码动手的能力。 欢迎关注公众号(NLP Research),及时查看最新内容 原文标题:Retrieval-Augmented Generation (RAG): From Theory to LangChain Implementation 原文地址:…

golang学习3,golang 项目中配置gin的web框架

1.go 初始化 mod文件 go mod init gin-ranking 2.gin的crm框架 go get -u github.com/gin-gonic/gin 3.go.mod爆红解决

JAVA高并发——函数式编程

文章目录 1、FunctionalInterface注释2、接口默认方法3、lambda表达式4、方法引用5、走入函数式编程6、并行流与并行排序6.1、使用并行流过滤数据6.2、从集合得到并行流6.3、并行排序 在正式进入函数式编程之前&#xff0c;有必要先了解一下Java 8为支持函数式编程所做的基础性…

nginx之web服务器 页面配置

4.3.8 自定义 错误页面 我们 可以改变 默认的错误页面&#xff0c;同时也可以用指定的响应状态码进行响应, 可用位置&#xff1a;http, server, location, if in location 格式&#xff1a; error_page code ... [[response]] uri; 页面错误代码 error_page 固定写法 c…

状态空间模型(SSM)

论文&#xff1a;A new approach to linear filtering and prediction problems http://160.78.24.2/Public/Kalman/Kalman1960.pdf 状态空间模型介绍 术语状态空间模型具有非常广泛的含义&#xff0c;它简单地表示任何具有潜在状态的循环过程的概念。 它已被用来指代不同学科…