我的问题
我有一个循环,它根据条件(“新低天数 = 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["q"].iloc[x] = df["RSI on new low"].iloc[x]
else:
df["q"].iloc[x] = df["q"].iloc[x-1]
df
输入数据和预期输出
RSI on new low,days from new low,q
29.6,0,29.6
29.6,1,29.6
29.6,2,29.6
29.6,3,29.6
29.6,4,29.6
21.7,0,21.7
21.7,1,21.7
21.7,2,21.7
21.7,3,21.7
21.7,4,21.7
21.7,5,21.7
21.7,6,21.7
21.7,7,21.7
21.7,8,21.7
21.7,9,21.7
25.9,0,25.9
25.9,1,25.9
25.9,2,25.9
23.9,0,23.9
23.9,1,23.9
尝试的解决方案
我尝试使用 .shift() 函数创建一个公式,但我无法让它工作。
知道我该怎么做吗?
干杯!
最佳答案
也许你可以使用where
?
df['q']= df["RSI on new low"].where(df["days from new low"] == 0).fillna(method='ffill')
请参阅此处的文档:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.where.html
关于python - 如何用 Python 中的公式替换查看先前值的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57856634/