在pandas中计算数据末尾的百分比。

问题描述 投票:0回答:1

我需要计算给定的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]
python pandas data-science percentage
1个回答
0
投票

我相信你得到的原因是 NaN 你的输出值是因为 lastbegin 变量的类型是 Series. 尝试添加 .item(),它将返回 float 值。

last = df[-1:]['Close Price'].item()
begin = df[-days:-(days-1)]['Close Price'].item()

0
投票

而不是为了得到一个单一的元素而对你的数据进行切片(这给你带来了 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),所以根本就不是一天。

© www.soinside.com 2019 - 2024. All rights reserved.