关于python中reduce处理list速度快慢问题

阿呆上大学 发布于 2018/02/08 11:50
阅读 376
收藏 0

各位大神,在使用reduce对dataframe一列数据(字符串型,几万行数据)进行循环比较是否重复时,使用以下代码运行起来很快;后来稍微改动了下,用改动后的代码对一列数据(int64型,几万行)进行循环比较是否相等,运行起来很慢,请问问题出在哪里啊,大神们

改动前:

    df['是否重复']=""
    global i
    i = 0
    def process(x,y):
        global i
        if x == y:
            if x=='SC_1':
                df['是否重复'][i]="重复"

            else:
                df['是否重复'][i+1]="重复"
        i = i+1
        return y
    data =list(df['SC标志'])
    reduce(process,data)

改动后:

    df['桨距是否相等']=""
    global i
    i = 0
    def process(x,y):
        global i
        if x == y:
            df['桨距是否相等'][i]="相等"
        else:
            df['桨距是否相等'][i]="不相等"
        i = i+1
        return y
    data =list(df['桨距*10'])
    reduce(process,data)

加载中
0
大洋的顶端
大洋的顶端

不可能更慢的啊,整数的比较肯定快过字符串的,这是毋庸置疑的。

 

 

阿呆上大学
可是我运行起来速度很慢,打印了 下改动后的比较过程,都是像for循环一样处理的,能否帮忙看下什么问题
0
大洋的顶端
大洋的顶端

你假如是求得相同的个数 直接下面的 两下解决

from collections import Counter
阿呆上大学
我是对一列中相邻的两个数依次比较,如果相等,则在新增的列做个标记(相等),如果不相同,则做个标记(不相等)
0
大洋的顶端
大洋的顶端
from functools import reduce
from collections import Counter
import  random
df={}
df['桨距是否相等']=[]

df['桨距*10']=[]
for j in range(20000):
    df['桨距*10'].append(random.randint(1,10))
    df['桨距是否相等'].append(random.randint(1,3))
global i
i = 0
def process(x,y):
        global i
        if x == y:
            df['桨距是否相等'][i]="相等"
        else:
            df['桨距是否相等'][i]="不相等"

        i = i+1
        return y
data =list(df['桨距*10'])

reduce(process,data)

print(Counter(df['桨距是否相等']))

我这个演示了下 秒结束,不会很久的

大洋的顶端
大洋的顶端
回复 @阿呆上大学 : 你看看是不是加载读取Excel时间国漫
阿呆上大学
链接: https://pan.baidu.com/s/1c3d2VdA 密码: xsq4, 这是我的原始数据,还请大神帮忙看下问题出在哪里
0
阿呆上大学

链接: https://pan.baidu.com/s/1c3d2VdA 密码: xsq4,

这是我的原始数据,还请大神帮忙看下问题出在哪里

返回顶部
顶部