熊貓資料框是:
df = pd.DataFrame([['A', 1, 20], ['A', 2, 30], ['B', 1, 50], ['B', 3, 45], ['A', 4, 60], ['B', 5, 70]])
df.columns = ['Type', 'P', 'X']
df:
Type P X
0 A 1 20
1 A 2 30
2 B 1 50
3 B 3 45
4 A 4 60
5 B 5 70
期待:
我想應用嵌套條件來計算一個值并將其作為新列附加。
這就是我所做的:
result = 0
if (df.Type == 'A'):
if df.P % 2 == 0:
result = df.X 10
else:
restult = df.X 20
else:
if df.P % 2 == 0:
result = df.X 30
else:
result = df.X 40
df['Result'] = result
預期的輸出是:
Type P X Result
0 A 1 20 40
1 A 2 30 40
2 B 1 50 90
3 B 3 45 85
4 A 4 60 70
5 B 5 70 110
但它因錯誤而失敗:ValueError:系列的真值不明確。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
我挖了其他執行緒,但它們似乎是其他問題。
任何建議表示贊賞
uj5u.com熱心網友回復:
if運算子未矢量化,不能與 Series 一起使用,請np.select改用:
type_a, p_even = df.Type == 'A', df.P % 2 == 0
amount = np.select(
[type_a & p_even, type_a & ~p_even, ~type_a & p_even, ~type_a & ~p_even],
[10, 20, 30, 40]
)
df['Result'] = df.X amount
df
Type P X Result
0 A 1 20 40
1 A 2 30 40
2 B 1 50 90
3 B 3 45 85
4 A 4 60 70
5 B 5 70 110
uj5u.com熱心網友回復:
用 np.select(listof conditions, listofchoices, alternative)
condition=[(df.Type == 'A')&(df.P % 2 != 0),(df.Type == 'A')&(df.P % 2 == 0), (df.Type == 'B')&(df.P % 2 == 0)]
choices= [df.X 20,df.X 10,df.X 30]
df['result'] = np.select(condition, choices,df.X 40)
Type P X result
0 A 1 20 40
1 A 2 30 40
2 B 1 50 90
3 B 3 45 85
4 A 4 60 70
5 B 5 70 110
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/317934.html
上一篇:JSON檔案多個根
下一篇:如何使用字典替換文本中的字母?
