如何对一列进行分组并获得该列中每个类别的前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
我需要这个^,但又不会失去其他专栏。
答案 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)]