我需要计算给定的n天内收盘价的盈亏百分比.df是数据框架。收盘价是指收盘价。
def profit_loss(days):
last = df[-1:]['Close Price']
begin = df[-days:-(days-1)]['Close Price']
return ((last-begin)/last)*100
函数应该给定所需的百分比,如果给定天数,函数取最后一天的收盘价和最后第n天的收盘价,计算出盈亏百分比。如果给定了天数,函数会取最后一天的收盘价和最后第n天的收盘价,然后计算利润损失百分比。我的输出是给我NaN作为输出
profit_loss(7)
的输出是。
487 NaN
493 NaN
Name: Close Price, dtype: float64
预期产出为 -0.0102
.最近7天的收盘价数据为
[970.20,981.75,979.95,980.50,980.45,975.35,979.10]
我相信你得到的原因是 NaN
你的输出值是因为 last
和 begin
变量的类型是 Series
. 尝试添加 .item()
,它将返回 float
值。
last = df[-1:]['Close Price'].item()
begin = df[-days:-(days-1)]['Close Price'].item()
而不是为了得到一个单一的元素而对你的数据进行切片(这给你带来了 Series
正如Kurt Kline所指出的那样),你应该简单地获取感兴趣的元素。
def profit_loss(days):
last = df['Close Price'][-1]
begin = df['Close Price'][-days]
return ((last-begin)/last)*100
这也修正了一个错误:在原来的代码中,如果... ... days
=1,那么你把收盘价的天数 [-1:0]
由于这个分片从最后一个元素(-1)开始,并试图向下到第一个元素(0),所以根本就不是一天。