df = pd.DataFrame([[1.1, 1.1, 1.1, 2.6, 2.5, 3.4,2.6,2.6,3.4,3.4,2.6,1.1,1.1,3.3], list('AAABBBBABCBDDD'), [1.1, 1.7, 2.5, 2.6, 3.3, 3.8,4.0,4.2,4.3,4.5,4.6,4.7,4.7,4.8], ['x/y/z','x/y','x/y/z/n','x/u','x','x/u/v','x/y/z','x','x/u/v/b','-','x/y','x/y/z','x','x/u/v/w'],['1','4','3','2','4','2','5','3','6','3','5','1','2','5']]).T
df.columns = ['col1','col2','col3','col4','col5']
df
col1 col2 col3 col4 col5
0 1.1 A 1.1 x/y/z 1
1 1.1 A 1.7 x/y 4
2 1.1 A 2.5 x/y/z/n 3
3 2.6 B 2.6 x/u 2
4 2.5 B 3.3 x 4
5 3.4 B 3.8 x/u/v 2
6 2.6 B 4 x/y/z 5
7 2.6 A 4.2 x 3
8 3.4 B 4.3 x/u/v/b 6
9 3.4 C 4.5 - 3
10 2.6 B 4.6 x/y 5
11 1.1 D 4.7 x/y/z 1
12 1.1 D 4.7 x 2
13 3.3 D 4.8 x/u/v/w 5
如何获得col2名称的col5的前2个值并返回整行的顶部值。 期望的输出将返回如下
col2 col1 col3 col4 col5
1 A 1.1 1.7 x/y 4
2 A 1.1 2.5 x/y/z/n 3
8 B 3.4 4.3 x/u/v/b 6
6 B 2.6 4 x/y/z 5
9 C 3.4 4.5 - 3
13 D 3.3 4.8 x/u/v/w 5
12 D 1.1 4.7 x 2
答案 0 :(得分:2)
df.groupby('col2').apply(pd.DataFrame.nlargest, n=2, columns='col5')
col1 col2 col3 col4 col5
col2
A 1 1.1 A 1.7 x/y 4
2 1.1 A 2.5 x/y/z/n 3
B 8 3.4 B 4.3 x/u/v/b 6
6 2.6 B 4 x/y/z 5
C 9 3.4 C 4.5 - 3
D 13 3.3 D 4.8 x/u/v/w 5
12 1.1 D 4.7 x 2
但是,您有col5
字符串。将它们转换为整数
df.astype(dict(col5=int)).groupby('col2').apply(
pd.DataFrame.nlargest, n=2, columns='col5')
答案 1 :(得分:2)
您可以在tail
sort_values
df.sort_values(['col2','col5']).groupby('col2').tail(2)
Out[1218]:
col1 col2 col3 col4 col5
7 2.6 A 4.2 x 3
1 1.1 A 1.7 x/y 4
10 2.6 B 4.6 x/y 5
8 3.4 B 4.3 x/u/v/b 6
9 3.4 C 4.5 - 3
12 1.1 D 4.7 x 2
13 3.3 D 4.8 x/u/v/w 5