按一列分组,并获得除前5名以外的那些组的所有行。
这样做是为了获得每个组的前5行
x = pd.DataFrame({'A': ['p', 'p','p','p','p','p','p','p', 'q', 'q', 'q', 'q', 'q', 'q'], 'B' : [3,5,4,7,10,2,3,7,1,4,9,9,2,5]})
x = x.sort_values(by = 'Total', ascending = False).groupby(['Identifier']).head(5)
我希望该组的所有行(前5名除外)
所需结果:
A B
p 3
p 3
p 2
q 1
答案 0 :(得分:1)
使用pd.iloc[5:]
df = pd.DataFrame({'A': ['p', 'p','p','p','p','p','p','p', 'q', 'q', 'q', 'q', 'q'], 'B' : [3,5,4,7,10,2,3,7,1,4,9,9,2]})
df=df.sort_values(by = 'B', ascending = False)
输出:
A B
4 p 10
10 q 9
11 q 9
3 p 7
7 p 7
1 p 5
2 p 4
9 q 4
0 p 3
6 p 3
5 p 2
12 q 2
8 q 1
df.iloc[5:]
输出:
A B
1 p 5
2 p 4
9 q 4
0 p 3
6 p 3
5 p 2
12 q 2
8 q 1
答案 1 :(得分:0)
您可以尝试以下方法:
(x.sort_values('B', ascending=False)
.groupby('A', as_index=False,
group_keys=False)
.apply(lambda x: x.iloc[5:])
)
输出:
A B
0 p 3
6 p 3
5 p 2
8 q 1
答案 2 :(得分:0)
可能的解决方案如下:
In [1]: x = pd.DataFrame(
{
'A': ['p', 'p','p','p','p','p','p','p', 'q', 'q', 'q', 'q', 'q', 'q'],
'B': [3, 5, 4, 7, 10, 2, 3, 7, 1, 4, 9, 9, 2, 5]
}
)
x = x.sort_values(by=['A', 'B'], ascending=False)
x['shifted'] = x.groupby(['A'])['B'].shift(5)
x = x.dropna()[['A', 'B']]
x
Out [2]: A B
8 q 1
0 p 3
6 p 3
5 p 2