我想根据列中的最大值创建一个新的数据框。但是我有来自同一受访者的多个观察结果,我只想从每个受访者的列值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
有什么想法吗?
答案 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位上实现的