繁体   English   中英

如何根据 pandas 中多列的条件替换列中的值

[英]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 倍。

请参阅: https://stackoverflow.com/a/64504183/11671779

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM