首页 > 解决方案 > 如果一列中的值在另一列中有多个值,如何在pandas中根据优先级进行过滤

问题描述

如果我有这样的数据框:

    id        descrip   
0   0000      x         
1   0000      y
2   0000      z  
3   1111      x        
4   1111      z        
5   2222      z         
6   3333      x         
7   3333      y

而且我想基本上根据描述列的优先级保留行,如果有az,那么优先于ay,优先于x。

所以我基本上想要这个:

    id        descrip   
0   0000      z        
1   1111      z        
2   2222      z                
3   3333      y  

不知道我会如何处理这个

标签: python-3.xpandasdataframe

解决方案


df.groupby('id')['descrip'].max().reset_index()
     id descrip
0     0       z
1  1111       z
2  2222       z
3  3333       y

跟踪什么比什么更受欢迎总是好的。

假设顺序不同,即:y<z<x x 是最喜欢的。然后我们可以这样做:

df['descrip'] = df.descrip.astype('category').cat.reorder_categories(['y', 'z', 'x']).\
                      cat.as_ordered()

df.groupby('id')['descrip'].max().reset_index()

     id descrip
0     0       x
1  1111       x
2  2222       z
3  3333       x

推荐阅读