![](/img/trans.png)
[英]Adding column in pandas based on values from other columns with conditions
[英]How to replace values in a column based on conditions from multiple columns in pandas
當且僅當 dataframe 的三個不同列滿足三個條件時,我想替換“風險評級”列中的值。 我使用掩碼技術和 by.loc 方法完成了它,但它對我不起作用。 我只想對 9 行執行此操作。 對於這種特殊情況,我想將“風險等級”值從 0 替換為 9。 dataframe的長度是180002。這是我寫的代碼:
safety.loc[((safety['Employee Name']=="Shabbir Hussain") & (safety['Employee Number']==11231) &
(safety['Attendance Date']=="2020-03-12")),['Risk Rating']]=9
mask = (safety['Employee Name']=="Shakir Hussain") & (safety['Employee Number']==11026) &
(safety['Attendance Date']=="2020-03-12") & (safety['Risk Rating']==0)
safety['Risk Rating'][mask]=9
mask = (safety['Employee Name']=="Shakir Hussain") &
(safety['Employee Number']==11026) &
(safety['Attendance Date']=="2020-03-12") &
(safety['Risk Rating']==0)
如果你想有條件地賦值,你需要使用.loc來定位特定的索引,然后你可以賦值。
safety.loc[mask, 'Risk Rating']=9
或者您也可以使用numpy select來應用掩蔽。
safety['Risk Rating'] = np.select([mask], [9], default=safety['Risk Rating'])
改進@Bikhyat Adhiakri 的答案,考慮到您將處理數千行,請改用 numpy :
import numpy as np
arr = safety.to_numpy()
# replace 0, 1, 2 with the row numbers
mask = (arr[:,0] == "Shakir Hussain") * (arr[:,1] == 11026) * (df_np[:,2] == "2020-03-12")
arr[mask,4] = 9 # but your data will be in numpy format
# or you can use
# safety.loc[mask, 'Risk Rating'] = 9
對於大行數,numpy 可能會使該過程快 1000 倍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.