Pandas创建新的数据框,从多个观察中选择最大值

时间:2014-05-20 19:01:19

标签: python pandas subset

我想根据列中的最大值创建一个新的数据框。但是我有来自同一受访者的多个观察结果,我只想从每个受访者的列值1中选择最大值。 这是一个简化的例子:

DF:

   respondent  value1  value2
0           1       3      12
1           1       5      34
2           1       1      43
3           2       4      12
4           2       6      34
5           2       9      54
6           3       2      32
7           3       1       2
8           3       3      21

以下是我想要的结果:

newdf:

  respondent  value1  value2
0           1       5      34
1           2       9      54
2           3       3      21

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

以下是你想要的,并且看起来比@CT朱的回答更快:

In [30]:

df.loc[df.groupby('respondent').value1.idxmax().values]
Out[30]:
   respondent  value1  value2
1           1       5      34
5           2       9      54
8           3       3      21
In [31]:

%timeit df.loc[df.groupby('respondent').value1.idxmax().values]
%timeit df[df.groupby('respondent').value1.transform(lambda x: x==x.max())]
%timeit df.sort(['respondent', 'value1'], ascending=[1,0]).groupby('respondent').head(1)
100 loops, best of 3: 1.76 ms per loop
100 loops, best of 3: 2.99 ms per loop
100 loops, best of 3: 4.42 ms per loop

此外,上面是使用python 3.3

在pandas版本0.12.0 64位上实现的