我有以下(样本)数据框df:
data_list = [
1521811600,
1521811600,
1521811600,
1521811601,
315964847,
315964841,
315964841,
315964841,
315964841,
315964841,
315964841,
315964841,
1521811601,
1521811601,
1521811601,
]
df = pd.DataFrame({'data':data_list, 'flag':[0]*len(data_list)})
因此:
data flag
0 1521811600 0
1 1521811600 0
2 1521811600 0
3 1521811601 0
4 315964847 0
5 315964841 0
6 315964841 0
7 315964841 0
8 315964841 0
9 315964841 0
10 315964841 0
11 315964841 0
12 1521811601 0
13 1521811601 0
14 1521811601 0
'data'列应该是一系列升序时间戳,没有时间跳跃。有时在采集过程中,我得到一些明显无效的数据(某种回滚或跳远)。我想用标志列中的一些特殊标记值来识别和标记这些数据。
我想标记所有具有升序和连续数据的行(仅相差0或1),其中“标志”结果为1.我想标记第一次出现的虚假数据(向后跳转,或者向前跳转大于1),结果为“2”。我需要标记错误数据的第二次出现,通过坏数据的结尾,“标志”结果为3.
理想情况下,这就是我最终为上面的数据框所做的事情:
data flag
0 1521811600 1
1 1521811600 1
2 1521811600 1
3 1521811601 1
4 315964847 2
5 315964841 3
6 315964841 3
7 315964841 3
8 315964841 3
9 315964841 3
10 315964841 3
11 315964841 3
12 1521811601 1
13 1521811601 1
14 1521811601 1
除了上述内容之外,我无法对数据做出任何假设。例如,第一个虚假数据值(* 847)与其他虚拟数据值(* 841)不同的事实无关紧要;在良好的数据值从“600”到“* 601”“上升”之后,伪造数据值也不会立即开始。
也许值得指出的是,可能只有一个伪造的数据值,在这种情况下,没有标记为3的记录,例如期望的输出(此时显示向前跳跃而不是向后):
data flag
0 1521811599 1
1 1521811599 1
2 1521811599 1
3 2423603027 2
4 1521811599 1
5 1521811599 1
6 1521811599 1
我不知道如何在“pandonic”/“pandastic”/“大流行”中做到这一点?!方式...寻找用于熊猫的单词术语,就像人们对普通Python说的那样:“我不知道如何用Pythonic方式做某事”......
我确实提出了一些真正可怕的代码,以便更“手动”操作索引,但我从来没有完全正确,这是一个彻底的混乱。看起来,在Pandas的情况下,如果没有Pandonic的方法,尝试做一些事情会变得很难看,但至少这是一个非常明显的线索,你做错了。