【发布时间】:2020-01-11 09:00:41
【问题描述】:
我的问题
我有一个循环,它根据条件(“距新低的天数 = 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() 函数创建一个公式,但我无法让它工作。
知道我该怎么做吗?
干杯!
【问题讨论】:
-
或者如果每行的值不同,请尝试
df['q']=np.where(df["days from new low"].eq(0),df['RSI on new low'],df['RSI on new low'].shift()) -
行得通!谢谢你。如果我想将 IF 语句更改为 df["qB"].iloc[x] = (df["RSI on new low"].iloc[x-1] - df["RSI on new low "].iloc[x]) / -df["距离新低的天数"].iloc[x-1] 而不是 df["q"].iloc[x] = df["RSI 处于新低"]。 iloc[x] ?
-
不符合您发布的输出,因此未来的读者会感到困惑,我建议您在此处选择一个建议的答案,并在新条件+预期输出的情况下提出一个新问题
标签: python pandas loops dataframe formula