分享

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

 禁忌石 2023-05-17 发布于浙江

示例代码1:

import pandas as pdimport timeimport 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 msWall time: 21.9 msarray([[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 heapqtest_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最大值

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约