python - 在 pandas DataFrame 中基于 MultiIndex 提取组的组长

标签 python pandas dataframe

我找到了 this question它演示了如何根据 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

提前感谢您的考虑和回复。

最佳答案

您只需要在已排序数据帧的 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

关于python - 在 pandas DataFrame 中基于 MultiIndex 提取组的组长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58438690/

相关文章:

python - 格式化 timedelta64 字符串输出

c - 跨两个字节写入位

python - cv2 (cv2.cv2) 中未解析的引用 "cv2"

python - 使用装饰器在 __init__ 之后注入(inject)函数调用

python - 避免为 HTTP 请求进行 RDNS 查找

python - Pandas - 删除只有 NaN 值的行

python - 使用给定的不同长度的列表制作具有不同列长度的数据框

Python:如何从图像中切出具有特定颜色的区域(OpenCV、Numpy)

dataframe - 如何处理 Julia 中 bool 上下文中的缺失?

Python获取时差