我有一個數據幀和一系列速率。我的計算是非常簡單的:行(n-1)* rate + row(n)在熊貓數據幀中
NEW_ROW(N)= NEW_ROW(N-1)*率+ old_row(N)
我有我的數據幀20列。 率是一系列20(每列1)。我用循環編寫了一個代碼,運行時間接近9秒。我相信,這不是做這個練習的理想方式。我想找到一種Pythonic的方式來做到這一點。
data = pd.read_csv('data.csv')
ret_rate = pd.read_csv('Retention_Rate.csv')
ret_dat = data.copy()
for i in range(4, ret_dat.shape[1]):
for j in range(1, ret_dat.shape[0]):
if (ret_dat['MARKET_ID'][j] == ret_dat['MARKET_ID'][j-1]):
ret_dat.iloc[j, i] = ret_dat.iloc[j, i] + ret_rate.iloc[i-4,0]*ret_dat.iloc[j-1, i]
ret_dat.to_csv('adstock_data_v3.csv')
我已經把數據in a Google sheet。
ret_rate在csv中具有值。在將索引轉換爲data.columns時遇到困難。任何幫助,請... 'ret_rate_s = pd.Series(ret_rate.ix [:,0],index = data.columns)' 給我所有NaN – Nil
要讀取csv作爲系列,你應該使用熊貓函數['read_csv'](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html)。或者csv只有一列,或者您定義要與參數usecols一起使用的列。無論哪種情況,如果您設置'squeeze = True','read_csv'函數將返回一個Series而不是DataFrame。讀完csv後,你可以設置'ret_rate.index = data.columns' – elcombato
它工作! @elcombato。我可以創建一個系列,但是,然後,只有意識到df.multiply不能處理浮動類型。只有整合者允許!無賴! – Nil