数据框架(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实现了它,但这又变得笨拙,因为它成为元组列表,并且我必须将它们转换回数据帧类型
答案 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