Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python DataFrame:获取每种类型的前n个值_Python_Pandas_Dataframe - Fatal编程技术网

Python DataFrame:获取每种类型的前n个值

Python DataFrame:获取每种类型的前n个值,python,pandas,dataframe,Python,Pandas,Dataframe,我有一组如下的数据 ID Type value_1 value_2 1 A 12 89 2 A 13 78 3 A 11 92 4 A 9 79 5 B 15 83 6 B 34 91 7 B 2 87 8 B 3 86 9 B 7 85 10 C 9 83 11 C 3 85 12 C 2 87 13 C 12 88 14 C 11 82 我

我有一组如下的数据

ID  Type    value_1 value_2
1   A   12  89
2   A   13  78
3   A   11  92
4   A   9   79
5   B   15  83
6   B   34  91
7   B   2   87
8   B   3   86
9   B   7   85
10  C   9   83
11  C   3   85
12  C   2   87
13  C   12  88
14  C   11  82
我想根据
值_1
获得每种类型的前3名成员。我想到的唯一解决方案是:首先,将每种类型的数据放入一个数据帧,并根据
值_1
进行排序,然后得到前3位;然后,将结果合并在一起。 但是有什么简单的方法可以解决这个问题吗?为了便于讨论,我有下面的代码

#coding:utf-8
import pandas as pd
_data = [
    ["1","A",12,89],
    ["2","A",13,78],
    ["3","A",11,92],
    ["4","A",9,79],
    ["5","B",15,83],
    ["6","B",34,91],
    ["7","B",2,87],
    ["8","B",3,86],
    ["9","B",7,85],
    ["10","C",9,83],
    ["11","C",3,85],
    ["12","C",2,87],
    ["13","C",12,88],
    ["14","C",11,82]
]
head= ["ID","type","value_1","value_2"]
df = pd.DataFrame(_data, columns=head)

然后我们使用
groupby
tail
sort\u值

newdf=df.sort_values(['type','value_1']).groupby('type').tail(3)
newer
    ID type  value_1  value_2
2    3    A       11       92
0    1    A       12       89
1    2    A       13       78
8    9    B        7       85
4    5    B       15       83
5    6    B       34       91
9   10    C        9       83
13  14    C       11       82
12  13    C       12       88

当然<代码>数据帧。groupby可以通过组字段将数据帧拆分为不同的部分,
apply
功能可以对每个组应用自定义项

df.groupby('type', as_index=False, group_keys=False)\
    .apply(lambda x: x.sort_values('value_1', ascending=False).head(3))