从分组的数据帧中选择前n个最大的组

时间:2019-02-14 12:57:15

标签: python-3.x pandas

数据框架(df)结构

col1    col2
x   3131
y   9647
y   9648
z   9217
y   9652
x   23

分组:

grouped = df.groupby(col1)

我想选择前2个最大的组,即

y 9647
y 9648
y 9652

x 3131
x 23

如何使用熊猫来做到这一点。我已经使用list实现了它,但这又变得笨拙,因为它成为元组列表,并且我必须将它们转换回数据帧类型

1 个答案:

答案 0 :(得分:2)

使用value_counts索引索引,并按isin中的boolean indexing过滤行:

df1 = df[df['col1'].isin(df['col1'].value_counts().index[:2])]
print (df1)
  col1  col2
0    x  3131
1    y  9647
2    y  9648
4    y  9652
5    x    23

如果需要顶级组的DataFrame,请对enumerate使用字典理解:

dfs = {i: df[df['col1'].eq(x)] for i, x in enumerate(df['col1'].value_counts().index[:2], 1)}
print (dfs)
{1:   col1  col2
1    y  9647
2    y  9648
4    y  9652, 2:   col1  col2
0    x  3131
5    x    23}

print (dfs[1])
  col1  col2
1    y  9647
2    y  9648
4    y  9652

print (dfs[2])
  col1  col2
0    x  3131
5    x    23