Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用Python中的公式替换查看多个先前值的循环_Python_Database_Pandas_Loops - Fatal编程技术网

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

如何用Python中的公式替换查看多个先前值的循环,python,database,pandas,loops,Python,Database,Pandas,Loops,我的问题 我有一个循环,它使用基于其他列的值的公式或列中以前的值(取决于条件days from new low==0)创建一个列。它在一个巨大的数据集上运行非常慢,所以我想摆脱循环,找到一个更快的公式 现行工作守则 输入数据和预期输出 试图解决 首先,它给了我一个类型错误:不能将序列乘以“float”类型的非int;其次,我不知道如何将ffill合并到公式中 你知道我该怎么做吗 干杯 试试这个: df[mB_temp]=df[RSI处于新低].shift-df[RSI处于新低]/-df[days

我的问题

我有一个循环,它使用基于其他列的值的公式或列中以前的值(取决于条件days from new low==0)创建一个列。它在一个巨大的数据集上运行非常慢,所以我想摆脱循环,找到一个更快的公式

现行工作守则

输入数据和预期输出

试图解决

首先,它给了我一个类型错误:不能将序列乘以“float”类型的非int;其次,我不知道如何将ffill合并到公式中

你知道我该怎么做吗

干杯

试试这个:

df[mB_temp]=df[RSI处于新低].shift-df[RSI处于新低]/-df[days from new low].shift df[mB]=df[mB].shift df[mB].loc[df[days from new low]==0]=df[mB_temp].loc[df[days from new low]==0] 测向下降[mB_温度],轴=1 对于np,其中:

df[mB]=np。其中df[days from new low]==0,df[RSI on new low]。shift-df[RSI on new low]/-df[days from new low]。shift,df[mB]。shift
第二行提供的数据只有2个值。打字错误?np.哪里。。。这是你的友谊谢谢你的光临。我刚刚纠正了它。波尔卡,我试过了,我现在把它放到了帖子里,但是我没有任何乐趣。谢谢你的帖子。对于从新低点算起的天数==0但所有其他行均为NaN的行,它返回正确的值。我在末尾添加了df['mB']=df['mB'].ffill,现在似乎可以工作了。但是,我有一个额外的列mB_Temp,它不是理想的。我想你也需要在右边添加。loc:df[mB].loc[df[days from new low]==0]=df[mB_Temp]。loc[df[days from new low]==0]你知道我如何使用np.where重新编写吗?我添加了np.where版本。另外,您在我的原始代码的最后一行中删除mB_temp。
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')