簡體   English   中英

for 循環 pandas df 替代

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM