gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:31:37 26 4
gpt4 key购买 nike

我有一个数据(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

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

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

  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

关于python - 我的数据清理脚本很慢,有什么改进的想法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52808839/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com