Pandas数据框标记列数据模式更改后的一批行

时间:2018-04-16 22:41:18

标签: python pandas dataframe

我有以下(样本)数据框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的方法,尝试做一些事情会变得很难看,但至少这是一个非常明显的线索,你做错了。

0 个答案:

没有答案