我构建了一个如下所示的数据框:
title category1 category2 category3 category4
'a' 0.44214 NAN 0.99 0.35
'b' NAN NAN NAN NAN
'c' 0.31 0.41 0.5 0.53
对于每一行,我想用1表示两个最高值,用0表示所有其他值。
结果应如下所示:
title category1 category2 category3 category4
'a' 1 0 1 0
'b' 0 0 0 0
'c' 0 0 1 1
是否有buildin-function解决了这个问题,或者如何以其他方式实现?
答案 0 :(得分:2)
您可以按行降序排列(设置axis=1
)数据框中的所有数值。然后进行布尔比较,找到小于或等于2的等级值(le(2)
),这将是等级值1和2.最后,将布尔掩码转换为整数。
>>> df.rank(axis=1, ascending=False, numeric_only=True).le(2).astype(int)
category1 category2 category3 category4
title
'a' 1 0 1 0
'b' 0 0 0 0
'c' 0 0 1 1