2017-02-16 3 views
0

я получил следующее ДФ:Python функция не работает

df = pd.DataFrame(columns=['mbs','Wholesale Data Usage'], index=['x','y','z']) 
df.loc['x'] = pd.Series({'mbs':32, 'Wholesale Data Usage':36}) 
df.loc['y'] = pd.Series({'mbs':64, 'Wholesale Data Usage':62}) 
df.loc['z'] = pd.Series({'mbs':256, 'Wholesale Data Usage':277}) 

Кроме того, я определил следующую функцию:

def calculate_costs(row): 
    mbs = row.loc['mbs'] 
    wdu = row.loc['Wholesale Data Usage'] 

    ac = 0 
    if wdu >= mbs: 
     if mbs == 32 | mbs == 64: 
      ac = (wdu - mbs) * 0.05 
     elif mbs == 128 | mbs == 256: 
      ac = (wdu - mbs) * 0.036 
     elif mbs == 512 | mbs == 1024: 
      ac = (wdu - mbs) * 0.018 

    return ac 

По какой-то причине, если я применить функцию к моему ФРУ все из значения строк равны 0:

df['Additional Charge'] = df.apply(lambda r: calculate_costs(r), axis=1) 

Не могли бы вы сообщить, что я делаю неправильно?

+0

Либо 'wdu' это меньше, чем' mbs' или 'wdu' является'> = '' mbs' и ни один из внутренних условий True. – byxor

+0

Я думаю, что я заметил ошибку ... это связано с '' '.... но что я могу использовать иначе, чтобы комбинировать разные условия в 1 if-заявлении? 'Or'? –

+0

решил! он должен быть 'или' –

ответ

1

Я не уверен, что это то, что вы хотите, результат не равен нулю. (Я изменил | символ "или")

def calculate_costs(row): 
    mbs = row.loc['mbs'] 
    wdu = row.loc['Wholesale Data Usage'] 
    print(mbs,wdu) 
    ac = 0 
    if wdu >= mbs: 
     print("Hej") 
     if mbs == 32 or mbs == 64: 
      ac = (wdu - mbs) * 0.05 
     elif mbs == 128 or mbs == 256: 
      ac = (wdu - mbs) * 0.036 
     elif mbs == 512 or mbs == 1024: 
      ac = (wdu - mbs) * 0.018 
     else: 
      print ("Hello") 
    return ac 
+0

Да, это то, чего они хотят. Они сказали это в комментариях. – byxor

Смежные вопросы