我想根据列中的最大值创建一个新的数据框。但是,我有来自同一受访者的多个观察结果,我只想从每个受访者的 value1 列中选择最大值。 这是一个简化的示例:
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
有什么想法吗?
最佳答案
以下内容实现了您想要的效果,并且似乎比 @CT Zhu 的答案更快:
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 位上实现的
关于python - Pandas 创建新的数据框,从多个观察中选择最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23767883/