我有一个来自机器的timeseries数据帧,其中的值是不同的标记和一些不同格式的标记
| datetime | tagid | value |
|---------------------|--------|-------|
| 08-04-2021 11:30:58 | BNO_01 | 12849 |
| 08-04-2021 11:30:58 | BNO_02 | 12597 |
| 08-04-2021 11:30:58 | BNO_03 | 14390 |
| 08-04-2021 11:30:58 | MDL_01 | 21328 |
| 08-04-2021 11:30:58 | MDL_02 | 22304 |
| 08-04-2021 11:30:58 | SEQ_01 | 12340 |
| 08-04-2021 11:30:58 | SEQ_02 | 13622 |
| 08-04-2021 11:30:58 | STA | 724 |
| 08-04-2021 11:30:58 | STO | 735 |
转换标签ID BNO_01、BNO_02、BNO_03、MDL_01、MDL_02、SEQ_01、SEQ_02
使用df['tagid']=df['tagid']。应用(λx:chr(圆形(x/256))+chr(x%256)),但仅适用于上述标记行
删除行MDL_01、MDL_02、BNO_01、BNO_02、BNO_03并将文本合并为BNO行
删除SEQ_01、SEQ_02行,并将文本合并为SEQ行
示例:
MDL_01=21328-->;'SP',
MDL_02=22304-->;'W'
BNO_01=12849-->;'21'
BNO_02=12597-->;'15'
BNO_03=14390-->;'86'
BNO='spw211586'
所需数据帧
| datetime | tagid | value |
|---------------------|-------|------------|
| 08-04-2021 11:30:58 | BNO | SPW 211586 |
| 08-04-2021 11:30:58 | SEQ | 0456 |
| 08-04-2021 11:30:58 | STA | 724 |
| 08-04-2021 11:30:58 | STO | 735 |
首先将其
tagid
列包含_
的value
列值更改为char然后从
tagid
列中删除_
此外,}和
groupby()
{tagid
列,并用''
连接每个组中的value
列最后,将
BNO
和MDL
行合并并删除MDL
行其思想是通过^{} 过滤值首先通过^{} 过滤,通过} 与原始过滤行不匹配条件:
lambda function
处理行,然后排序,并在将MDL
替换为BNO
聚合值后使用join
,最后使用~
对反向掩码使用^{此解决方案的优点是不更改不匹配的值,因此,如果重复项(如2次
STA
)且也未将values
更改为字符串,则不会进行聚合相关问题 更多 >
编程相关推荐