首页 > 解决方案 > Pandas:如何获得每组中的前 2 行、中 2 行和后 2 行

问题描述

假设我有一个数据框 df ,如下所示。为了在我使用的每组中获得第一个 2 和最后 2 个groupby.nth

df = pd.DataFrame({'A': ['a','a','a','a','a','a','a','a','b','b','b','b','b','b','b'],
                   'B': [1, 2, 3, 4, 5,6,7,8,1, 2, 3, 4, 5,6,7]}, columns=['A', 'B'])
df.groupby('A').nth([0,1,-2,-1])

结果:

    B
A   
a   1
a   2
a   7
a   8
b   1
b   2
b   6
b   7

我不确定如何获得中间的 2 行。例如,在 group'A'中有 8 个实例,所以我的中间是4, 5 (n/2, n/2+1),而'B'我的中间行是3, 4 (n/2-0.5, n/2+0.5). 任何指导表示赞赏。

标签: pandaspandas-groupby

解决方案


您可以使用iloc查找每个组的n//2 -1n//2索引(//是楼层划分):

g = df.groupby('A')

g.apply(lambda x: x['B'].iloc[[len(x)//2-1, len(x)//2]])

A    
a  3     4
   4     5
b  10    3
   11    4
Name: B, dtype: int64

推荐阅读