Skip to main content
 首页 » 编程设计

python之如何使用 2 列值更新第三列中的值

2025年05月04日12lovecherry

我想用 0 或 1 更新列,其中每个 empID 的月份最小,Sal Hike 最大: 我编写了代码来查找每位员工的 Min Month 和 Max Sal Hike。

df.sort_values(['salhike','month'],ascending=[False,True]).groupby("empid").head(1) 

如何用 1 列更新“Yes_or_No”中的这个?

输入方向:

empid   age salhike month   YES_or_NO 
123     23  12      1       0 
123     23  24      2       0 
123     23  87      3       0 
123     23  35      4       0 
111     23  87      1       0 
111     23  35      2       0 
111     23  14      3       0 
111     23  12      4       0 

我正在尝试获取输出表是:

empid   age salhike month   YES_or_NO 
123     23  12      1       0 
123     23  24      2       0 
123     23  87      3       1 
123     23  35      4       0 
111     23  87      1       1 
111     23  35      2       0 
111     23  14      3       0 
111     23  12      4       0 

请您参考如下方法:

尝试使用 sort_values,然后使用 empid 上的子集复制并将 bool 系列转换为整数,然后分配返回数据框中的列:

df.assign(YES_or_NO = (~df.sort_values(['empid','salhike']) .duplicated(subset='empid', keep='last')).astype(int))

df.assign(YES_or_NO = (~df.sort_values(['salhike','month'], 
                                        ascending=['True','False','False']) 
                          .duplicated(subset='empid', keep='last')).astype(int)) 

输出:

   empid  age  salhike  month  YES_or_NO 
0    123   23       12      1          0 
1    123   23       24      2          0 
2    123   23       87      3          1 
3    123   23       35      4          0 
4    111   23       87      1          1 
5    111   23       35      2          0 
6    111   23       14      3          0 
7    111   23       12      4          0