我有下面的有序数据框,它在文本文件中有特定行的位置
数据:
index position
0 125
1 256
2 314
3 355
4 549
5 601
6 654
7 727
8 1100
9 1217
我有另一个数据帧,其中包含消息msg1、msg2和msg3以及它们在文本文件中的位置,可以有几个实例。这些消息表示如何对数据进行分组
信息:
index position message
0 210 msg1
1 313 msg2
2 525 msg3
3 575 msg2
4 632 msg1
5 731 msg3
条件
a)如果线路在第一次遇到信息之前(不一定是msg1,由位置标识),则线路将被归类为a级
b)如果该行在最后一条消息之后(不一定是msg3,由位置标识),则该行将被分类为:
a) if msg1 is last: grade A1
b) if msg2 is last: grade A2
c) if msg3 is last: grade A3
c)如果该行位于两条消息之间,即消息开始[i]和消息结束[j],则该行将被归类为“A级”+str(i)
我尝试了if-else语句,但未能正确实现它。不需要对消息帧中的位置进行任何硬编码的任何更容易的方法都将得到赞赏
预期输出是一个系列/数据帧或一个列表,其中的行根据条件分组
index position group
0 125 grade A
1 256 grade A1
2 314 grade A2
3 355 grade A2
4 549 grade A3
5 601 grade A2
6 654 grade A1
7 727 grade A1
8 1100 grade A3
9 1217 grade A3
我会:
'grade A'
+消息编号的消息的所有行添加一个新列grade
position
列上的串联数据帧进行排序fillna
用上一条消息的等级填充等级列fillna
将第一条消息之前的任何行设置为'grade A'
代码可以是:
对于您的示例数据,它给出了预期的结果:
对于消息数据框中的每一行,我们添加下一条消息的位置,以便于比较:
为数据中的每一行添加消息:
添加“边缘”案例:
并用你的类替换消息
相关问题 更多 >
编程相关推荐