python - 如何从 Pandas 数据框中的一行中选择具有最高值的 3 列?

标签 python pandas dataframe

所以我有一个数据框如下:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.array([[1, 2, 3, 3, 2, 1], [4, 3, 6, 6 ,3 ,4], [7, 2, 9, 9, 2, 7]]),
                   columns=['a', 'b', 'c', 'a_select','b_select','c_select'])

df

现在,我可能需要重新组织数据框(或使用两个)来完成此任务,但是......

我想从每行的每个“_select”列中选择 2 个最大值,然后用它来表示相应的列。

例如,第 1 行表示 a 和 b 中的值,第 2 行 a 和 c 中的值(不是我们正在查看的 _select 列中的值)。

目前我只是迭代每一行 - 因为这看起来相当简单,但对于大型数据集来说速度很慢 - 但是我无法弄清楚如何使用 apply 或 lambda 函数来执行等效操作(或者如果有可能的话) )。

最佳答案

使用nlargest的简单oneliner

>>> df.filter(like='select').apply(lambda s: s.nlargest(2), 1).mean(1)

对于性能来说,也许numpy很有用:

>>> np.sort(df.filter(like='select').to_numpy(), 1)[:, -2:].mean(1)

要从第一列获取值,请使用argsort

>>> arr = df.filter(like='select').to_numpy()
>>> df[['a', 'b', 'c']].to_numpy()[[[x] for x in np.arange(len(arr))], 
np.argsort(arr, 1)][:, -2:].mean(1)

array([1.5, 5. , 8. ])

关于python - 如何从 Pandas 数据框中的一行中选择具有最高值的 3 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72521310/

相关文章:

Python/Pygame,标签未显示

python - 用 3 个视频分离 MPEGTS 多队列、填充流

python - 返回 pandas DF 列,其中包含索引和今天日期之间经过的天数

具有复杂标准的 python pandas 重复数据删除

python - 使用 python 脚本通过 SSH 连接到服务器

python - repl 在网页中,最好的方法是什么?

python - Pandas:根据集合中的项目数量进行选择

python - 将列表拆分为单独的单词

python - 如何从带有附加分隔符的 csv 在 python 中创建 pandas 数据框?

python - 使用原始文件名的部分动态命名导入 Python 的 DataFrame