python技巧获取dataframe一列或列表中前n个最大值最小值

示例代码1:

import pandas as pd
import time
import numpy as np
 

test_lst = [['A', 0, 6], ['A', 1, 57], ['A', 2, 81], ['A', 3, 9], ['A', 4, 87],['B', 0, 24], ['B', 1, 30], ['B', 2, 96], ['B', 3, 54],
 ['B', 4, 81], ['C', 0, 6], ['C', 1, 6], ['C', 2, 6], ['C', 3, 93], ['C', 4, 99], ['D', 0, 0], ['D', 1, 90], ['D', 2, 6], ['D', 3, 87],
 ['D', 4, 75], ['E', 0, 93], ['E', 1, 60], ['E', 2, 63], ['E', 3, 48], ['E', 4, 36]]

test_df1 = pd.DataFrame(test_lst, columns = ["Name", "rating", "num_items"])
list(test_df1.groupby('Name')['rating'].nlargest(3).index)

以上代码运行结果:

[('A', 4),
 ('A', 3),
 ('A', 2),
 ('B', 9),
 ('B', 8),
 ('B', 7),
 ('C', 14),
 ('C', 13),
 ('C', 12),
 ('D', 19),
 ('D', 18),
 ('D', 17),
 ('E', 24),
 ('E', 23),
 ('E', 22)]

示例代码2:

test_df2 = pd.DataFrame(data=np.random.randint(0, 10, (3, 10)), columns=range(10), index=range(3))  
%time np.array([test_df2[c].nlargest(3).index.values for c in test_df2])

以上代码运行结果:

CPU times: total: 15.6 ms
Wall time: 21.9 ms
array([[0, 1, 2],
       [1, 2, 0],
       [0, 1, 2],
       [0, 2, 1],
       [2, 0, 1],
       [0, 2, 1],
       [0, 1, 2],
       [0, 2, 1],
       [1, 0, 2],
       [0, 1, 2]], dtype=int64)

获取列表中前3个最大值/最小值

import heapq
test_list = [1, 3, 2, 4, 5]
nlargest_elements = (heapq.nlargest(3, range(len(test_list)), test_list.__getitem__)) # nsmallest 最小值函数
print(nlargest_elements)
print([a[x] for x in nlargest_elements])

以上代码运行结果:

[4, 3, 1] #最大值的索引值
[5, 4, 3] #前3最大值

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/73790
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 10 日
下一篇 2024 年 7 月 10 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注