在 pandas DataFrame 中基于 MultiIndex 提取组头

3

我找到了这个问题,它展示了如何根据MultiIndex的第一层对DataFrame进行排序。因此,初始的DataFrame如下:

l = [[1,'A',99],[1,'B',102],[1,'C',105],[1,'D',97],[2,'A',19],[2,'B',14],[2,'C',10],[2,'D',17]]
df = pd.DataFrame(l,columns = ['idx1','idx2','col1'])
df.set_index(['idx1','idx2'],inplace=True)

# assume data has been received like this...
print df

           col1
idx1 idx2      
1    A       99
     B      102
     C      105
     D       97
2    A       19
     B       14
     C       10
     D       17

可以在每个level=1组内进行排序,以产生如下结果:

           col1
idx1 idx2      
1    C      105
     B      102
     A       99
     D       97

2    A       19
     D       17
     B       14
     C       10

我的问题是:如何基于第一层级提取每个组的前 n 个元素?
例如,如果 n=2,则结果将为:
           col1
idx1 idx2      
1    C      105
     B      102

2    A       19
     D       17

感谢您的考虑和回复。

在此之前。
1个回答

4
你只需要在排序后的数据框上使用 groupby 命令中的 head 即可:
df.sort_values('col1', ascending=False).groupby('idx1').head(2)

输出:

           col1
idx1 idx2      
1    C      105
     B      102
2    A       19
     D       17

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接