【发布时间】:2021-05-11 02:22:03
【问题描述】:
我正在读取一个 .csv 文件并创建一个 pandas 数据框。该文件是股票文件。我只对日期、公司和成交成本感兴趣。我希望我的程序找到开始日期、结束日期和公司的最大利润。它需要使用分而治之的算法。我只知道如何使用 for 循环,但它需要永远运行。 .csv 文件有 200,000 行。我怎样才能让它快速运行?
import pandas as pd
import numpy as np
import math
def cleanData(file):
df = pd.read_csv(file)
del df['open']
del df['low']
del df['high']
del df['volume']
return np.array(df)
df = cleanData('prices-split-adjusted.csv')
bestStock = [None, None, None, float(-math.inf)]
def DAC(data):
global bestStock
if len(data) > 1:
mid = len(data)//2
left = data[:mid]
right = data[mid:]
DAC(left)
DAC(right)
for i in range(len(data)):
for j in range(i+1,len(data)):
if data[i,1] == data[j,1]:
profit = data[j,2] - data[i,2]
if profit > bestStock[3]:
bestStock[0] = data[i,0]
bestStock[1] = data[j,0]
bestStock[2] = data[i,1]
bestStock[3] = profit
print(bestStock)
print('\n')
return bestStock
print(DAC(df))
【问题讨论】:
-
干得好!干得好!
-
导致系统性能下降的主要问题是 1)您在嵌套循环中手动迭代 2 列而不使用使用快速 ndarray 函数的 pandas 操作; 2)你使用递归调用,看起来不错,简单但速度慢。尝试使用熊猫功能,例如。 groupby("company").agg(...) 获得公司最佳收益的新列。然后在这个新栏目上使用idxmax,得到所有公司中收益最好的公司的条目。
-
我好像迷路了!代码是否甚至到达嵌套的 for 循环(假设发布的代码中没有缩进错误)?
-
@sai 是的,确实如此。但是,嵌套循环逻辑(如冒泡排序)正在完成所有任务。代码并没有真正利用分而治之的结果。
标签: python pandas numpy recursion divide-and-conquer