我的問題我有一個循環,它使用基于其他列的值的公式或列中的前一個值創建列,具體取決于條件(“從新低開始的天數 == 0”)。在龐大的數據集上它真的很慢,所以我想擺脫循環并找到一個更快的公式。當前工作代碼import numpy as npimport pandas as pdcsv1 = 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,mB0,22,029.6,0,1.329.6,1,1.329.6,2,1.329.6,3,1.329.6,4,1.321.7,0,-2.021.7,1,-2.021.7,2,-2.021.7,3,-2.021.7,4,-2.021.7,5,-2.021.7,6,-2.021.7,7,-2.021.7,8,-2.021.7,9,-2.025.9,0,0.525.9,1,0.525.9,2,0.523.9,0,-1.023.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 dfdf = mB_calc('days from new low','RSI on new low','mB') 首先,它給了我這個“TypeError:不能將序列乘以'float'類型的非整數”,其次我不知道如何將“ffill”合并到公式中。知道我怎么能做到嗎?干杯!
1 回答

暮色呼如
TA貢獻1853條經驗 獲得超9個贊
試試這個:
df["mB_temp"] = (df["RSI on new low"].shift() - df["RSI on new low"]) / -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]
df.drop(["mB_temp"], axis=1)
并與np.where:
df["mB"] = np.where(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())
添加回答
舉報
0/150
提交
取消