2017-02-16 62 views
0

我已經得到了以下DF: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 

出於某種原因,如果我申請的功能,我DF所有的行值爲0:

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

您能否告訴我我做錯了什麼?

+0

要麼'wdu'是mbs'小於',或'wdu'是'> =''mbs'和無的內條件都爲真。 – byxor

+0

我認爲我已經發現了錯誤....這是由於'|'....但是我可以使用其他什麼來結合1條語句中的不同條件? '或'? –

+0

解決了!它應該是'或' –

回答

1

我不確定這是你想要的,結果現在不爲零。 (I改變|符號進行 「或」)

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