社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

如何用python中的公式替换查看多个先前值的循环

pythonlearner13 • 6 年前 • 1520 次点击  

我的问题

我有一个循环,它使用基于其他列的值的公式或根据条件创建列中的前一个值(“days from new low==0”)。对于一个庞大的数据集来说,速度确实很慢,所以我想摆脱这个循环,找到一个更快的公式。

当前工作代码

import numpy as np
import pandas as pd

csv1 = pd.read_csv('stock_price.csv', delimiter = ',')
df = pd.DataFrame(csv1)

for x in range(1,len(df.index)):
    if df["days from new low"].iloc[x] == 0:
        df["mB"].iloc[x] = (df["RSI on new low"].iloc[x-1] - df["RSI on new low"].iloc[x]) / -df["days from new low"].iloc[x-1]
    else:
        df["mB"].iloc[x] = df["mB"].iloc[x-1]

df

输入数据和预期输出

RSI on new low,days from new low,mB
0,22,0
29.6,0,1.3
29.6,1,1.3
29.6,2,1.3
29.6,3,1.3
29.6,4,1.3
21.7,0,-2.0
21.7,1,-2.0
21.7,2,-2.0
21.7,3,-2.0
21.7,4,-2.0
21.7,5,-2.0
21.7,6,-2.0
21.7,7,-2.0
21.7,8,-2.0
21.7,9,-2.0
25.9,0,0.5
25.9,1,0.5
25.9,2,0.5
23.9,0,-1.0
23.9,1,-1.0

试图解决

def mB_calc (var1,var2,var3):
    df[var3]= np.where(df[var1] == 0, df[var2].shift(1) - df[var2] / -df[var1].shift(1) , "")
    return df

df = mB_calc('days from new low','RSI on new low','mB')  

首先,它给了我这个“typeerror:不能用‘float’类型的非int乘序列”;其次,我不知道如何将“ffill”合并到公式中。

你知道我怎么做吗?

干杯!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40095
 
1520 次点击  
文章 [ 1 ]  |  最新文章 6 年前