为每个类别python选择前10条记录

时间:2019-03-02 03:36:17

标签: python pandas dataframe

如何对一列进行分组并获得该列中每个类别的前10条记录?

我要分组的列具有3个类别:“高”,“中”和“低”。

我还有另一列包含用于对数据进行排名的数字数据。

这是我数据框的开头:

country   designation     points    province               title             year    price   price_category
Italy     Vulkà Bianco     98        Sicily     Nicosia 2013 Vulkà Bianco    2013     65     high

我的代码在此返回数值列的前2个,但是我丢失了所有其他列。有没有办法做到而又不会损失其他专栏?

df.groupby('price_category')['points'].nlargest(2)

这是我的输出,我丢失了所有其他列:

category_column        
high        36528     100
            42197     100
low         5011       95
            15196      95
med         114981     97
            9901       96

我需要这个^,但又不会失去其他专栏。

3 个答案:

答案 0 :(得分:0)

之前曾有人问过这个问题,并在堆栈pandas groupby sort within groups中在这里回答。您要做的是创建一个分组数据框架,并创建一个具有聚合总和的列。现在,在新的聚合列上创建另一个分组依据。然后,使用帖子中提到的.nlargest。

答案 1 :(得分:0)

您需要:

df = pd.DataFrame({'id':[1,2,3,4,5,6,7,8,9,10,11,12], 
                   'level':['low','high','low','medium','medium','high','low','high','medium','high','medium','low'],
                   'values':[23,43,56,12,34,32,18,109,345,21,15,45]})

# use nlargest(10) for your problem. 
print(df.groupby('level')['values'].nlargest(2))

输出:

level                                                                                                                                         
high    7     109                                                                                                                             
        1      43                                                                                                                             
low     2      56                                                                                                                             
        11     45                                                                                                                             
medium  8     345                                                                                                                             
        4      34   

答案 2 :(得分:0)

使用以下命令获取索引级别:

df.groupby('price_category')['points'].nlargest(2).index.get_level_values(1)

然后使用索引列表对数据帧进行切片

df.iloc[df.groupby('price_category')['points'].nlargest(2).index.get_level_values(1)]