[英]for-loop pandas df alternative
為我的 for 循環尋找更清潔的替代解決方案。 我希望根據以下邏輯創建一個列(df['result'])
:
d = {'a': [1,5], 'b': [2,4], 'c': [3,3], 'd':[4,2], 'e': [5,1]}
df = pd.DataFrame(d)
df['result'] = np.NaN
for i in range(len(df)):
if df['a'][i] == 1:
df['result'][i] = 1
elif df['b'][i] == 2:
df['result'][i] = 2
elif df['c'][i] == 3:
df['result'][i] = 3
elif df['d'][i] == 4:
df['result'][i] = 4
elif df['e'][i] == 5:
df['result'][i] = 5
else:
df['result'][i] = 0
有沒有更簡潔的方法來創建這種層次邏輯而不像這樣循環?
使用numpy.select
:
import numpy as np
df["result"] = np.select([df["a"].eq(1), df["b"].eq(2), df["c"].eq(3), df["d"].eq(4), df["e"].eq(5)],
[1,2,3,4,5],
0)
IIUC,試試這個(如果你有很多列並且不想對索引進行編碼):
m = df.eq(range(1,len(df.columns)+1))
df['result'] = df.where(m).bfill(1).iloc[:,0]
print(df)
a b c d e result
0 1 2 3 4 5 1.0
1 5 4 3 2 1 3.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.