获取两列之间的最大数字并在pandas中标记它们

ikfrs5lh  于 2023-04-28  发布在  其他
关注(0)|答案(2)|浏览(133)

我有一个有两列的df;女人和男人,我想得到最大值,然后标记各自的值。

df=pd.DataFrame({'WOMEN':[0,1,3,1,2,0,0],
                 'MEN':[2,3,1,2,0,0,1]})

目标是创建一个名为‘性’的新栏目,在‘女性’和‘男性’之间具有最大值;例如,在第一种情况下,结果值应该是2,从'MEN'的相应值,接下来的步骤我需要,我会标记数据源,我的意思是,在最后,我不需要值,我需要从源值标记为1到MEN和0到WOMEN。
对于下面的情况,第二个,来自MEN的最大原始值是3,该值应该转到新列'sex',但我想将其标记为'1',最后,如果值相等,我希望标记的值是随机的0或1。
我留下一张表来说明最后的结果
| 身份证|女性|男士|性别|
| --------------|--------------|--------------|--------------|
| 1|0|二|1|
| 二|1|三|1|
| 三|三|1|0|
| 四|1|二|1|
| 五|二|0|0|
| 六|0|0|0|
| 六|0|1|1|
男人:1,女人:0
谢谢你的支持

3df52oht

3df52oht1#

只需比较列的值并将结果的布尔值转换为整数:

df['SEX'] = df['MEN'].gt(df['WOMEN']).astype(int)

输出:

WOMEN  MEN  SEX
0      0    2    1
1      1    3    1
2      3    1    0
3      1    2    1
4      2    0    0
5      0    0    0
6      0    1    1
anauzrmj

anauzrmj2#

df.apply(lambda x: 0 if x[0]>x[1] else 1, axis = 1)

结果:

0    1
1    1
2    0
3    1
4    0
5    0
6    1
dtype: int64

使用apply with axis = 1来对df的每一行应用lambda函数。这里的lambda只是使用x[0](第0列- woman)和x[1](第1列- men)的条件表达式。

相关问题