Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何更有效地编写以下代码?_Python_Pandas_Time Series - Fatal编程技术网

Python 如何更有效地编写以下代码?

Python 如何更有效地编写以下代码?,python,pandas,time-series,Python,Pandas,Time Series,有没有有效的方法来编写下面的循环?dataPLprocessed是一个时间序列数据,我想根据滚动7天百分位值计算分数(更多解释请参见下面的循环) 在每个if语句中,您可以将其分配给变量,而不是使用dataPLprocessed['percentile'][i] for i in range(len(dataPLprocessed)): x = dataPLprocessed['percentile'][i] if (x < .05) | ( x > .95):

有没有有效的方法来编写下面的循环?dataPLprocessed是一个时间序列数据,我想根据滚动7天百分位值计算分数(更多解释请参见下面的循环)


在每个if语句中,您可以将其分配给变量,而不是使用
dataPLprocessed['percentile'][i]

for i in range(len(dataPLprocessed)):
    x = dataPLprocessed['percentile'][i]

    if (x < .05) | ( x > .95):
        dataPLprocessed.loc[i, 'score'] = 10
    elif (x < .1) | ( x > .9):
        dataPLprocessed.loc[i, 'score'] = 9
    elif (x < .15) |( x > .85):
        dataPLprocessed.loc[i, 'score'] = 8
    elif (x < .2) |(x > .8):
        dataPLprocessed.loc[i, 'score'] = 7
    elif (x < .25) |( x > .75):
        dataPLprocessed.loc[i, 'score'] = 6
    elif (x < .3) |(x > .7):
        dataPLprocessed.loc[i, 'score'] = 5
    elif (x < .35) |( x > .65):
        dataPLprocessed.loc[i, 'score'] = 4
    elif (x < .4) |( x > .6):
        dataPLprocessed.loc[i, 'score'] = 3
    elif (x < .45) |( x > .55):
        dataPLprocessed.loc[i, 'score'] = 2
    elif (x < .5) |( x > .5):
        dataPLprocessed.loc[i, 'score'] = 1
范围内i的
(len(dataPLprocessed)):
x=dataPLprocessed['百分位][i]
如果(x<0.05)|(x>0.95):
dataPLprocessed.loc[i,'得分']=10
elif(x<0.1)|(x>0.9):
dataPLprocessed.loc[i,‘score']=9
elif(x<0.15)|(x>0.85):
dataPLprocessed.loc[i,'得分']=8
elif(x<0.2)|(x>0.8):
dataPLprocessed.loc[i,'得分']=7
elif(x<0.25)|(x>0.75):
dataPLprocessed.loc[i,'得分']=6
elif(x<0.3)|(x>0.7):
dataPLprocessed.loc[i,'得分']=5
elif(x<0.35)|(x>0.65):
dataPLprocessed.loc[i,‘score']=4
elif(x<0.4)|(x>0.6):
dataPLprocessed.loc[i,'得分']=3
elif(x<0.45)|(x>0.55):
dataPLprocessed.loc[i,‘score']=2
elif(x<0.5)|(x>0.5):
dataPLprocessed.loc[i,‘score']=1

一种可能性是动态生成百分位数,并检查补码,例如,
x不在0.05和0.95之间:

范围内i的
(len(dataPLprocessed)):
x=dataPLprocessed['百分位][i]
对于范围(10)内的k:
p=圆形(0.05+0.05*k,2)
如果不是(p
您可以首先使用分配给每个迭代的
dataPLprocessed['percentile'][i]
的临时变量,这样您就不会在每次迭代中重新访问同一元素多达20次。太好了!谢谢@Blorgony欢迎@UmangGarg。警告一下,我没有测试这段代码。有必要在这里使用吗?这不是非常必要的,没有。但是用这个等式生成百分位数会引入浮点算术错误,例如:
0.05+0.05*6=0.3500000000000003
{Timestamp('2020-05-17 23:30:00'): -0.18600000000000005, Timestamp('2020-05-17 23:45:00'): -0.18600000000000005, Timestamp('2020-05-18 00:00:00'): -0.18600000000000005, Timestamp('2020-05-18 00:15:00'): -0.18900000000000008, Timestamp('2020-05-18 00:30:00'): -0.18800000000000008, Timestamp('2020-05-18 00:45:00'): -0.18900000000000008, Timestamp('2020-05-18 01:00:00'): -0.18600000000000005, Timestamp('2020-05-18 01:15:00'): -0.18300000000000005, Timestamp('2020-05-18 01:30:00'): -0.18200000000000005, Timestamp('2020-05-18 01:45:00'): -0.18400000000000005, Timestamp('2020-05-18 02:00:00'): -0.18400000000000005, Timestamp('2020-05-18 02:15:00'): -0.18300000000000005, Timestamp('2020-05-18 02:30:00'): -0.18200000000000005, Timestamp('2020-05-18 02:45:00'): -0.18600000000000005, Timestamp('2020-05-18 03:00:00'): -0.18700000000000008, Timestamp('2020-05-18 03:15:00'): -0.19000000000000009, Timestamp('2020-05-18 03:30:00'): -0.18999999999999995, Timestamp('2020-05-18 03:45:00'): -0.18999999999999995, Timestamp('2020-05-18 04:00:00'): -0.18999999999999995, Timestamp('2020-05-18 04:30:00'): -0.18700000000000008}
{Timestamp('2020-05-17 23:30:00'): -0.18600000000000005, Timestamp('2020-05-17 23:45:00'): -0.18600000000000005, Timestamp('2020-05-18 00:00:00'): -0.18600000000000005, Timestamp('2020-05-18 00:15:00'): -0.18900000000000008, Timestamp('2020-05-18 00:30:00'): -0.18800000000000008, Timestamp('2020-05-18 00:45:00'): -0.18900000000000008, Timestamp('2020-05-18 01:00:00'): -0.18600000000000005, Timestamp('2020-05-18 01:15:00'): -0.18300000000000005, Timestamp('2020-05-18 01:30:00'): -0.18200000000000005, Timestamp('2020-05-18 01:45:00'): -0.18400000000000005, Timestamp('2020-05-18 02:00:00'): -0.18400000000000005, Timestamp('2020-05-18 02:15:00'): -0.18300000000000005, Timestamp('2020-05-18 02:30:00'): -0.18200000000000005, Timestamp('2020-05-18 02:45:00'): -0.18600000000000005, Timestamp('2020-05-18 03:00:00'): -0.18700000000000008, Timestamp('2020-05-18 03:15:00'): -0.19000000000000009, Timestamp('2020-05-18 03:30:00'): -0.18999999999999995, Timestamp('2020-05-18 03:45:00'): -0.18999999999999995, Timestamp('2020-05-18 04:00:00'): -0.18999999999999995, Timestamp('2020-05-18 04:30:00'): -0.18700000000000008}
for i in range(len(dataPLprocessed)):
    x = dataPLprocessed['percentile'][i]

    if (x < .05) | ( x > .95):
        dataPLprocessed.loc[i, 'score'] = 10
    elif (x < .1) | ( x > .9):
        dataPLprocessed.loc[i, 'score'] = 9
    elif (x < .15) |( x > .85):
        dataPLprocessed.loc[i, 'score'] = 8
    elif (x < .2) |(x > .8):
        dataPLprocessed.loc[i, 'score'] = 7
    elif (x < .25) |( x > .75):
        dataPLprocessed.loc[i, 'score'] = 6
    elif (x < .3) |(x > .7):
        dataPLprocessed.loc[i, 'score'] = 5
    elif (x < .35) |( x > .65):
        dataPLprocessed.loc[i, 'score'] = 4
    elif (x < .4) |( x > .6):
        dataPLprocessed.loc[i, 'score'] = 3
    elif (x < .45) |( x > .55):
        dataPLprocessed.loc[i, 'score'] = 2
    elif (x < .5) |( x > .5):
        dataPLprocessed.loc[i, 'score'] = 1