2016-11-16 80 views
0

嗨即時newbi在python編程和即時通訊仍然在學習它。 我想問我有一個csv數據至少有5列(TC,TD,TG,P,CTTR)。我想爲CTTR欄存儲新的值。python商店新值

新配方到塔CTTR是

enter image description here

i是行的號碼。

但我不知道如何將公式寫入python。 我知道如何獲得最初的CTTR值作爲熊貓輸入。

import pandas as pd 

data_df = pd.read_csv("output1.csv") 

cttr = data_df['CTTR'] 

print cttr 

我有12線的數量,我想輸出具有與輸入相同數量的行。如果index [0],cttr [i-2]和cttr [i-1]的值將是== 0,並且當index [11]時,cttr [i + 2]和cttrs [i + 1]將== 0。然後我想將CTTR的新值替換爲csv的新值。

原來CTTR值

0 
2 
2 
23 
18 
28 
27 
58 
41 
12 
35 
20 

輸出我預計

0.6------> (0 + 2*0 + 4*0 + 2*2 + 2)/10 
3.5 -----> (0 + 2*0 +4*2 +2*2 + 23)/10 
7.6 
16.2 
20.3 
28.3 
33.9 
40.8 
36.6 
27.8 
24.5-----> (41 + 2*12 + 4*35 + 2*20 + 0)/10 
16.2-----> (12 + 2*35 + 4*20 +2*0 + 0)/10 

謝謝!你可以做到這一點

回答

1

你不是你要找的輸出十分清楚,但一種方法是:

vals = df.CTTR.values 

np.array([vals[i-2] + 2*vals[i-1] + 4*vals[i] + 2*vals[i+1] + vals[i+2] for i in range(2,len(vals)-2)])/10. 

這就是說,基本上你實現加權移動平均對此我敢肯定有。如果你想在第一/最後在沒有觀測資料職位零已經實現(也許有各地的大熊貓看看rolling

,你可以這樣做:

np.append(np.append([0,0],np.array([vals[i-2] + 2*vals[i-1] + 4*vals[i] + 2*vals[i+1] + vals[i+2] for i in range(2,len(vals)-2)])/10.),[0,0]) 

雖然這是有點笨重,所以你可能希望把這個包在一個函數像這樣:

def calc_new_cttr(series): 
    vals = series.values 
    cttrs = np.array([vals[i-2] + 2*vals[i-1] + 4*vals[i] + 2*vals[i+1] + vals[i+2] for i in range(2,len(vals)-2)])/10. 
    return np.append(np.append([0,0], cttrs),[0,0]) 

然後你就可以直接調用你的系列這樣的:

calc_new_cttr(data_df["CTTR"]) 

要寫到CSV,你可以轉化列分配給您的數據幀和出口用熊貓CSV作家CSV:

data_df["transformed_cttr"] = calc_new_cttr(data_df["CTTR"]) 
data_df.to_csv("/path/to/your/file.csv") 

------------ --------編輯-----

在最新的評論中所描述的邊界行爲可以通過應用轉換之前,簡單地填充了一系列再沒有第一和最後兩個條目返回的結果數組來實現:

def cttr(series): 
    vals = np.append(np.append([0,0], series.values),[0,0]) 
    cttrs = np.array([vals[i-2] + 2*vals[i-1] + 4*vals[i] + 2*vals[i+1] + vals[i+2] for i in range(2,len(vals)-2)])/10. 
    return cttrs 
+0

嘿嘿感謝你回答。可惜,但我有12線的數量,我想輸出具有與輸入相同數量的線。如果index [0],vals [i-2]和vals [i-1]的值將是== 0,並且當索引[11]時,vals [i + 2]和vals [i + 1]將== 0。我想用CTTR的新值替換CTTR的原始值到csv。 –

+0

不知道我明白這一點 - 你的線是什麼?你是否在談論邊界處的濾波器行爲(即,'i-2'和'i-1'不存在的地方)? –

+0

我的英語不好。我的意思是我總共有12條數據輸入(0 2 2 23 18 28 27 58 41 12 35 20),但你的代碼只是給我8個數據輸出。是的,當i-2和i-1不存在時,我想默認值爲0。 –