想知道是否可以在不創建函式的情況下在一行中在 Python 中重現以下邏輯。
z = IF (y-x) = 0 THEN a ELSE (y-x)
使用這個df:
df = pd.DataFrame({'x': [10, 22, 31, 43, 57, 99, 65, 74, 88],
'y':[10, 50, 31, 66, 57, 199, 75, 80, 100]})
看起來像:
x y
0 10 10
1 22 50
2 31 31
3 43 66
4 57 57
5 99 199
6 65 75
7 74 80
8 88 100
產生以下輸出:
x y z
10 10 10
22 50 28
31 31 31
43 66 23
57 57 57
99 199 100
65 75 10
74 80 6
88 100 12
我嘗試了以下操作,但這會回傳語法錯誤。
z = if(y - x) == 0: a else: (y - x)
我很欣賞有類似的問題,但我沒有找到任何適用于我的用例或有足夠的解釋以便我可以重新調整代碼的用途。
uj5u.com熱心網友回復:
您可以使用np.where:
import numpy as np
df['z'] = np.where(df['x']==df['y'], df['x'], df['y'] - df['x'])
在這里,條件df['x']==df['y']創建了一個布爾序列,其長度len(df)按與 相同的順序排列df,即具有相同的索引。然后,無論何處為 True,您都從df['x']相應索引中獲取值,而無論何處為 False,您都從df['y'] - df['x']相應索引中獲取值。從上一句可以清楚地看出,所有三個系列必須具有相同的長度(或必須是可廣播的)。
我們得到的輸出(我們分配給df['z'])是一個長度陣列,len(df)其中的元素來自df['x']我們的條件為 True 的元素,以及來自df['y'] - df['x']其他元素的元素。
從檔案:
如果所有陣列都是一維的,則相當于:
[xv if c else yv for c, xv, yv in zip(condition, x, y)]
由于我們這里有一維陣列,我們也可以使用
df['z'] = [x if c else y_minus_x
for c, x, y_minus_x in zip(df['x']==df['y'], df['x'], df['y'] - df['x'])]
相同的結果。
輸出:
x y z
0 10 10 10
1 22 50 28
2 31 31 31
3 43 66 23
4 57 57 57
5 99 199 100
6 65 75 10
7 74 80 6
8 88 100 12
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/405549.html
標籤:
上一篇:根據條件選擇最佳數量
下一篇:if陳述句的正確寫法:
