lmw0320 2019-05-08 09:37 采纳率: 75%
浏览 716
已采纳

python的代码如何改进,以加快运行速度?

手头有份数据,需要根据另一份标准指标(数据有含有几个指标,每个指标都各自的等级划分,示意图如下)
图片说明

我需要将手头的数据,根据这个标准值,将对应的数值全部转换成对应的等级。自己写了份代码,但是运行速度太慢(1000个数据,运行了居然2-3分钟)。。
想请问下高手们,有什么办法改进没?

具体代码如下:

for zb in list(data_std['指标']):
    for num in range(data.shape[0]):
        if zb !='DISSOLVED_O2': #某指标比较特殊,数值越大越好。其余指标是数值越小越好。因此要单独设置
            if (data[zb][num]) <= float(data_std[data_std['指标'] ==zb]['I']):
                data['%s_wq'%zb][num] = 1
            elif float(data_std[data_std['指标'] ==zb]['I']) < data[zb][num] <= float(data_std[data_std['指标'] ==zb]['II']):
                data['%s_wq'%zb][num] = 2
            elif float(data_std[data_std['指标'] ==zb]['II']) < data[zb][num] <= float(data_std[data_std['指标'] ==zb]['III']):
                data['%s_wq'%zb][num] = 3
            elif float(data_std[data_std['指标'] ==zb]['III']) < data[zb][num] <= float(data_std[data_std['指标'] ==zb]['IV']):
                data['%s_wq'%zb][num] = 4
            elif float(data_std[data_std['指标'] ==zb]['IV']) < data[zb][num] <= float(data_std[data_std['指标'] ==zb]['V']):
                data['%s_wq'%zb][num] = 5
            elif (data[zb][num]) > float(data_std[data_std['指标'] ==zb]['V']):
                data['%s_wq'%zb][num] = 6
            else:
                data['%s_wq'%zb][num] = np.NaN
        if zb =='DISSOLVED_O2':
            if (data[zb][num]) >= float(data_std[data_std['指标'] ==zb]['I']):
                data['%s_wq'%zb][num] = 1
            elif float(data_std[data_std['指标'] ==zb]['I']) > data[zb][num] >= float(data_std[data_std['指标'] ==zb]['II']):
                data['%s_wq'%zb][num] = 2
            elif float(data_std[data_std['指标'] ==zb]['II']) > data[zb][num] >= float(data_std[data_std['指标'] ==zb]['III']):
                data['%s_wq'%zb][num] = 3
            elif float(data_std[data_std['指标'] ==zb]['III']) > data[zb][num] >= float(data_std[data_std['指标'] ==zb]['IV']):
                data['%s_wq'%zb][num] = 4
            elif float(data_std[data_std['指标'] ==zb]['IV']) > data[zb][num] >= float(data_std[data_std['指标'] ==zb]['V']):
                data['%s_wq'%zb][num] = 5
            elif (data[zb][num]) < float(data_std[data_std['指标'] ==zb]['V']):
                data['%s_wq'%zb][num] = 6
            else:
                data['%s_wq'%zb][num] = np.NaN
data.head()
  • 写回答

4条回答 默认 最新

  • lmw0320 2019-05-08 14:20
    关注

    刚刚自己试验了下,应该成功了,在这里贴下我改进的代码。
    就是循环设置函数,用apply的命令,把数值转换掉。(当然,为了简化处理,我提取了那个特殊的指标,单独处理)
    谢谢刚才答复的那几位朋友~~

    for n,zb in zip(range(1,d_std.shape[0]),d_std['指标'][1:]): #从第2行开始进行转换。
        def tran(y):
            if y <= d_std.loc[n]['I']:
                return 1
            elif y <= d_std.loc[n]['II']:
                return 2
            elif y <= d_std.loc[n]['III']:
                return 3
            elif y <= d_std.loc[n]['IV']:
                return 4
            elif y <= d_std.loc[n]['V']:
                return 5
            elif y > d_std.loc[n]['V']:
                return 6
            else:
                return np.NaN
        data['%s_X1'%zb] = data[zb].apply(tran)
    data.head()
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建