【发布时间】:2016-08-30 07:48:46
【问题描述】:
我正在尝试在 python 中对大量数组进行排序。我需要一次对超过 1100 万个数组进行排序。
另外,如果我可以直接获取对数组进行排序的索引,那就太好了。
这就是为什么,到目前为止,我正在使用 numpy.argsort() 但这在我的机器上太慢了(需要一个多小时才能运行)
R 中的相同操作在同一台机器上大约需要 15 分钟。
谁能告诉我在 Python 中执行此操作的更快方法?
谢谢
编辑:
添加示例
如果我有以下数据框:
agg:
x y w z
1 2 2 5
1 2 6 7
3 4 3 3
5 4 7 8
3 4 2 5
5 9 9 9
我正在运行以下函数和命令:
def fucntion(group):
z = group['z'].values
w = group['w'].values
func = w[np.argsort(z)[::-1]][:7] #i need top 7 in case there are many
return np.array_str(func)[1:-1]
output = agg.groupby(['x,'y']).apply(function).reset_index()
所以我的输出数据框将如下所示:
output:
x y w
1 2 6,2
3 4 2,3
5 4 7
5 9 9
【问题讨论】:
-
您输入的具体内容是什么?它是数组列表吗?你能添加一个示例输入案例吗?
-
它是 pandas 数据框列的一部分。
-
除了您尝试过的内容之外,您能否提供一些示例数据和所需的输出?
-
您知道
axis到argsort的参数吗? -
不,我不是。 @用户2357112。我读过它,我真的不认为它会为我完成这项工作。
标签: python performance sorting numpy pandas