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

标签 python pandas subset

我想根据列中的最大值创建一个新的数据框。但是,我有来自同一受访者的多个观察结果,我只想从每个受访者的 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/

相关文章:

python - 如果该行为空,Python 有没有办法退出程序?

python - 如何根据 pandas 数据框中的多列对元素进行分组,并将每组的元素数量保存在另一列中?

python - 格式{:%}: Add space between digit and percentage

python - 属性错误 : 'function' object has no attribute 'sum' pandas

r - 基于存储在独立有序向量中的值对对数据帧进行子集

arrays - 数组所有子集中的最大或值

python - awk命令根据python中的时间戳范围从日志文件中获取所有记录

pandas - DataFrame.apply 不直观地将 int 更改为 float 破坏索引循环

python - 当 'ID' 为 1 时,如何创建一个新列插入分组列 'interaction'(及时)的单元格值

r - filter() 或subset() 存储在列表中的所有数据帧