Python 如何使用两列值更新第三列中的值?

Python 如何使用两列值更新第三列中的值?,python,pandas,numpy,Python,Pandas,Numpy,我想用0或1更新列,其中每个empID的月份最小,Sal Hike的月份最大: 我已经编写了代码来查找每个员工的最小月数和最大月数 df.sort_values(['salhike','month'],ascending=[False,True]).groupby("empid").head(1) 如何用1列更新“是”或“否” 输入DF: empid age salhike month YES_or_NO 123 23 12 1 0 123 23

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

df.sort_values(['salhike','month'],ascending=[False,True]).groupby("empid").head(1)
如何用1列更新“是”或“否”

输入DF:

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_值,然后使用empid上的子集进行复制,并将布尔序列转换为整数,然后重新分配给dataframe中的列:

df.assignYES\u或\u NO=~df.sort\u值['empid','salhike'] .duplicatedsubset='empid',keep='last'.astypeint

输出:

   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
尝试使用sort_值,然后使用empid上的子集进行复制,并将布尔序列转换为整数,然后重新分配给dataframe中的列:

df.assignYES\u或\u NO=~df.sort\u值['empid','salhike'] .duplicatedsubset='empid',keep='last'.astypeint

输出:

   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
使用groupby transform max

更新

df['YES_or_NO']=0
df.loc[df.groupby('empid')['salhike'].idxmax(),'YES_or_NO']=1
使用groupby transform max

更新

df['YES_or_NO']=0
df.loc[df.groupby('empid')['salhike'].idxmax(),'YES_or_NO']=1


正在尝试应用此项但不起作用:file.assignYES\u或\u NO=~file.sort\u值['salhike','empid',升序=[False,True]。duplicatedsubset='empid',keep='last'。aTypeInt您得到的是什么排序、错误或不正确的输出?我得到的是较小的salhike和最大月数为1。@subodhagrawal尝试更新排序,并将月添加到sort.file.assignYES\u或\u NO=~file.sort\u值['salhike','month',升序=[True,False]。duplicatedsubset='empid',keep='last'.aTypeInt尝试应用此项但不起作用:file.assignYES\u或\u NO=~file.sort\u值['salhike','empid',升序=[False,True]。duplicatedsubset='empid',keep='last'。aTypeInt您得到的是什么排序、错误或不正确的输出?我得到的是较小的salhike和最大月数为1。@subodhagrawal尝试更新排序,并将月添加到sort.file.assignYES\u或\u NO=~file.sort\u值['salhike','month',升序=[True,False]。duplicatedsubset='empid',保持class='last'。astypenti我试图得到最小月数和最大月数。@subodhagrawal你说的最小月数和最大月数是什么意思?对于id 123,最小月数是1,最大月数是12,那么我们应该给它指定1吗?您的代码将给出正确的输出,但是如果对于EMPID 123,第4个月的salhike值是87,那么这将给我第3个月和第4个月的值都是1,而不是仅给第3个月的值。@subodhagrawal我给出了更新,请检查一下,谢谢…这很简单:-我正试图得到最低月数和最高月数。@subodhagrawal你说的最低月数和最高月数是什么意思?对于id 123,最小月数为1,最大月数为12,那么我们是否应该为其指定1?您的代码将给出正确的输出,但如果对于EMPID 123,第4个月的salhike值为87,则第3个月和第4个月的salhike值均为1,而不是仅第3个月的值。@subodhagrawal我给出了更新,请检查它。这很简单:-