首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我的数据清理脚本很慢,有什么改进的想法吗?

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

Stack Overflow用户
提问于 2018-10-15 02:04:47
回答 1查看 110关注 0票数 1

我有一个数据(csv格式),其中第一列是一个划时代的时间戳(严格增加),而其他列是累积行(只是增加或相等)。样本如下:

代码语言:javascript
复制
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,但不少于100。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-15 02:16:17

IIUC,可以使用

代码语言:javascript
复制
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]

输出

代码语言:javascript
复制
    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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52808839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档