【发布时间】:2017-10-18 10:57:48
【问题描述】:
我远不是熊猫专家。我是一名普通的开发人员。
我想计算一个托管值。 我有一个 df,它是每天的市场价格(以日期为索引)和 dfTrend,它是 0 和 1,具有相同的索引。
我想将这两个数据帧发送到一个函数并获得一个托管值,这意味着当趋势为零时,我希望托管值保持平坦,当趋势为一时,我希望值增加并遵循市场价格。
我的代码运行良好,但速度很慢:
def getManagedValue(df, dfTrend):
dfReturn = df.pct_change(1)
dfManaged = df
for col in df:
for i in range(1, len(df[col])):
dfManaged[col][0] = df[col][0]
if dfTrend[col][i] == 1:
dfManaged[col][i] = dfManaged[col][i-1] * (1 + dfReturn[col][i])
else:
dfManaged[col][i] = dfManaged[col][i-1]
return dfManaged
有谁知道我可以如何优化它以使其运行得更快?所有列的所有单元格的迭代肯定是这里的问题。
我正在考虑用 cython 运行它,但我相信我不允许将 pandas 与 cython 一起使用,只能使用 numpy 的数组...
有人有建议吗?
干杯, 朱利安
【问题讨论】:
标签: python python-2.7 pandas numpy scalability