如何在python中对列表块进行排序?

2024-09-19 23:43:49 发布

您现在位置: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()

但是这给了我一个错误

ValueError: Can only compare identically-labeled Series objects

所以基本上我希望在testList中有一个输出,它包含每个96块中的前4个最小元素


Tags: import元素列表排序顺序filenamepd费率
2条回答

这里有一个建议的解决方案,它的优点是可以矢量化。我使用的是一个小得多的数据集-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]
iexRate = pd.Series(range(1,100))

n = 15

x = [iexRate[i:i + n] for i in range(0, len(iexRate), n)]

testList = [sorted(block)[:4] for block in x]
[[1, 2, 3, 4], [16, 17, 18, 19], [31, 32, 33, 34], [46, 47, 48, 49], [61, 62, 63, 64], [76, 77, 78, 79], [91, 92, 93, 94]]

相关问题 更多 >