简体   繁体   English

python for loop作为函数中的elif语句

[英]python for loop as elif statement in function

I am trying to insert a for loop inside a function that loops through values from a list. 我试图在循环通过列表中的值的函数内插入for循环。

Consider I have the following dataframe: 考虑我有以下数据框:

import pandas as pd

df = pd.DataFrame()

df['A'] = (53.104898,   52.032832,  48.705107,  43.150132,  42.09353,   42.32076,   41.620527,  44.479339,  44.673272,  43.811447,  44.273042,  47.384234,  49.210512,  50.330492   ,48.808856, 49.543268,  43.460175,  41.54373,   49.618678,  44.988629,  52.964725,
56.358917,  53.366254)
df['B'] = (2.157,2.0826,0.8452,-0.3046,-0.3436,-0.3906,-1.1528,-0.9462,-1.1314,-0.9994,-1.0538,0.785,1.5334,0.1424, 0.764,-0.6844,-2.5798,-2.3644,-1.97,-3.7466,-1.862,-0.248, -0.456)

def func():
    q = [40,60]

    def valuation_formula(x, y):

        for i in q:
            if x > 3.9:
                return 'SIT'
            elif x < -3.8:
                return 'SIT'
            elif x > 0.00 and y > i:
                return 'BUY'
            elif x < 0.00 and y < 41.14:
                return 'SELL'
            else:
                return 'SIT'

    df['C'] = df.apply(lambda row: valuation_formula(row['A'], row['B']), axis=1)

    print(df)
    i=i+1

func()

Actual results should be 2 seperate dataframes. 实际结果应为2个单独的数据帧。 1 dataframe using 40 as i from list q and second using 60 1个数据帧,使用列表q中的40作为i,第二个数据帧使用60

As mentioned in the comments, a return inside a loop will terminate everything, so you will only look at the first value of q . 如注释中所述,循环内的return将终止所有操作,因此您只会查看q的第一个值。 Also, you are mixing for i in q and i+=1 ... 另外,您正在for i in qi+=1混合...

Anyway, a quick fix is: 无论如何,一个快速的解决方法是:

q = [40,60]

def valuation_formula(i, x, y):
    # pass the i as a parameter
    if x > 3.9:
        return 'SIT'
    elif x < -3.8:
        return 'SIT'
    elif x > 0.00 and y > i:
        return 'BUY'
    elif x < 0.00 and y < 41.14:
        return 'SELL'
    else:
        return 'SIT'

# loop here
for i in q:
    df['C'] = df.apply(lambda row: valuation_formula(i, row['A'], row['B']), axis=1)
    print(df)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM