python - 如何在python中对列表块进行排序?
问题描述
我有一个费率列表,其中包含近 35040 个值。我已将列表分成 365 个块,其中包含 96 个元素。现在我想从每个块中获取前 4 个最小值并首先实现这一点,我按递增顺序对块进行排序,并将列表中的前 4 个元素打印或插入到新列表中。我的方法:
import pandas as pd
inputFile = "inputFile.xlsx"
fileName = inputFile
inputSheetDF = pd.read_excel(fileName, sheet_name='Sheet1')
iexRate = inputSheetDF['IEX Price']
#iexRate = [2.3, 2.4, 3, 4, 3.2, 4.1, 5.......]
testList = []
n = 96
x = [iexRate[i:i + n] for i in range(0, len(iexRate), n)]
x.sort()
但这x.sort()
给了我一个错误。
ValueError: Can only compare identically-labeled Series objects
所以基本上我想要一个输出,testList
其中包含每个 96 块中的前 4 个最小元素。
解决方案
这是一个建议的解决方案,它具有矢量化的优点。我正在使用一个小得多的数据集 - 3 个块,每个块 4 个,从每个块中采样顶部(按钮)2 - 但更大数据集的想法当然是相同的。
df = pd.DataFrame({"rate": np.random.randint(1, 100, 12), "chunk": [1]*4 + [2]*4 + [3]*4 })
print(df)
==>
rate chunk
0 81 1
1 51 1
2 50 1
3 83 1
4 33 2
5 88 2
6 97 2
7 2 2
8 22 3
9 23 3
10 4 3
11 83 3
df.sort_values("rate", inplace=True)
df.groupby("chunk").head(2).sort_values("chunk")
==>
rate chunk
2 50 1
1 51 1
7 2 2
4 33 2
10 4 3
8 22 3
要获得所有费率的统一列表,只需执行以下操作:
flat_list = list(res.rate)
==> [50, 51, 2, 33, 4, 22]
推荐阅读
- asp.net-core - 为 AspNetUser 添加自定义字段
- angular7 - 如何在Angular7中选择日期后从ngxTimepicker获取值以及调用函数?
- php - 图片更新前旧图片删除后更新新图片php
- c++ - Xcode C++ 错误:代码相同,但运行时输出发生变化
- python - 通过 djnago restframework 响应使用模型作为字典发送数据时缺少新行 \n 字符
- azure - Azure 服务主体无法将权限分配给资源组
- c++ - AVL 树可以在不同节点中具有相同的键值吗?
- html - 使用 SASS 将类存储在扩展中
- python-3.x - 不处理已经存在的数据
- typescript - 为什么类定义在另一个 ts 文件中可用?