所以我有一个数据框如下:
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/