我想用 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
