我的数据清理脚本很慢,关于如何改进有什么想法吗?

my data cleaning script is slow, any ideas on how to improve?

我有一个数据(csv 格式),其中第一列是纪元时间戳(严格递增),其他列是累积行(递增或相等)。 样本如下:

df = pandas.DataFrame([[1515288240, 100, 50, 90, 70],[1515288241, 101, 60, 95, 75],[1515288242, 110, 70, 100, 80],[1515288239, 110, 70, 110, 85],[1515288241, 110, 75, 110, 85],[1515288243,110,70,110,85]],columns =['UNIX_TS','A','B','C','D'])
df =
id    UNIX_TS  A   B   C  D
 0 1515288240 100 50  90 70
 1 1515288241 101 60  95 75
 2 1515288242 110 70 100 80
 3 1515288239 110 70 110 85
 4 1515288241 110 75 110 85
 5 1515288243 110 70 110 85

import pandas as pd
def clean(df,column_name,equl):
    i=0
    while(df.shape[0]-2>=i):
        if df[column_name].iloc[i]>df[column_name].iloc[i+1]:
            df.drop(df[column_name].iloc[[i+1]].index,inplace=True)
            continue
        elif df[column_name].iloc[i]==df[column_name].iloc[i+1] and equl==1:
            df.drop(df[column_name].iloc[[i+1]].index,inplace=True)
            continue
        i+=1

clean(df,'UNIX_TS',1)
for col in df.columns[1:]:
    clean(df,col,0)

df =
    id    UNIX_TS  A   B   C  D
     0 1515288240 100 50  90 70
     1 1515288241 101 60  95 75
     2 1515288242 110 70 100 80

我的脚本按预期工作,但它太慢了,任何人都对如何提高它的速度有想法。

我写了一个脚本来根据 2 条规则删除所有无效数据:

  1. Unix_TS一定是严格递增的(因为是一个时间,不能倒流也不能停顿),
  2. 其他列在增加并且可以保持不变,例如在一行中它是 100,而在下一行它可以是 >=100 但不少于。

根据规则,索引 3 和 4 无效,因为 unix_ts 1515288239 是 1515288241 小于索引 2。 索引 5 是错误的,因为值 B 减少了

IIUC,可以用

cols = ['A', 'B', 'C', 'D']
mask_1 = df['UNIX_TS'] > df['UNIX_TS'].cummax().shift().fillna(0)
mask_2 = mask_2 = (df[cols] >= df[cols].cummax().shift().fillna(0)).all(1)

df[mask_1 & mask_2]

产出

    UNIX_TS     A   B   C   D
0   1515288240  100 50  90  70
1   1515288241  101 60  95  75
2   1515288242  110 70  100 80