我有以下資料框:
df = pd.DataFrame({'y': [4,3,6,1], 'x': [0,0,2,1]})
我想計算兩列的比率。但是,由于分母中有一些 0,我想用if else陳述句來修正 if 。條件應該是:如果分母中有0,則將其替換為1并計算比率,否則照常進行。
我做了這個(和其他變體)但它不起作用(見下面的錯誤):
if df['x'] == 0:
df['x'] = 1
df['ratio'] = df['y']/df['x']
else:
df['ratio'] = df['y']/df['x']
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
誰能幫我?
謝謝!
uj5u.com熱心網友回復:
這里的問題是 df['x'] 實際上是一個 Pandas 系列,它不是針對每個單獨的值進行評估,而是作為單個元素(pd 系列)本身進行評估,并且由于它包含多個值,因此評估會回傳錯誤因為它是模棱兩可的。
對于無需申請的快速有效的解決方案,您可以使用np.where(). 以便:
df['ratio'] = np.where(df['x'] == 0,df['y'],df['y']/df['x'])
輸出:
y x ratio
0 4 0 4.0
1 3 0 3.0
2 6 2 3.0
3 1 1 1.0
uj5u.com熱心網友回復:
如果你想讓它簡單并使用 if/else
import pandas as pd
df = pd.DataFrame({'y': [4,3,6,1], 'x': [0,0,2,1]})
if 0 in df['x']:
df['x'].replace(0, 1, inplace=True)
df['ratio'] = df['y']/df['x']
print(df)
這里的輸出
y x ratio
0 4 1 4.0
1 3 1 3.0
2 6 2 3.0
3 1 1 1.0
uj5u.com熱心網友回復:
你可以這樣做:
def x(a,b):
if b == 0:
b = 1
return a / b
df['ratio'] = df.apply(lambda f: x(f['y'],f['x']), axis=1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/371054.html
