Python Pandas Dataframe过滤和替换

时间:2015-12-18 16:54:00

标签: python pandas filter

我构建了一个如下所示的数据框:

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解决了这个问题,或者如何以其他方式实现?

1 个答案:

答案 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