2013-01-31 235 views
3

的子欄目,我有以下數據框熊貓數據框 - 計算基於列

      Qtr Premium  Claim  Rate 

Type Code           
A  3     14 3552.77  100991.7 0.004017 
     3     15 5610.67  105763.6 0.004017 
     3     16 6463.22  107740.6 0.004017 
     4     17 6129.91  106967.7 0.005638 
     4     18 4688.65  103625.6 0.005638 
     4     19 2158.94  97759.66 0.005638 
     4     20 8540.77  89369.72 0.005638 

我有常數「C」

我期待進行逐行計算使用了Qtr和Rate的相關值,但會更新Premium和Claim的值。

例子:

Premium = Premium/(1+Rate)^(c-Qtr) 
Claim = Claim/(1+Rate)^(c-Qtr) 

在現實中我有很多,我想這種計算進行了上欄。

回答

0

用df是您的數據框和C的名字是你不變,嘗試:

df['Premium'] = df.Premium/(1 + df.Rate) ** (c - df.Qtr) 
df['Claim'] = df.Claim/(1 + df.Rate) ** (c - df.Qtr) 

發表評論更新,我相信有這樣做的更Python的方式,但這個工程:

columns = df.columns 
subset_cols = columns.drop(['Rate','Qtr']) 
for col in subset_cols: 
    df[col] = df[col]/(1 + df.Rate) ** (c- df.Qtr) 

月2日更新,你可以提取計算成一個函數和一個列表理解執行過程

def calc(df, col, c): 
    df[col] = df[col]/(1 + df.Rate) ** (c - df.Qtr) 
[calc(df, col, c) for col in df.columns.drop(['Rate','Qtr'])] 
+0

非常感謝。計算正確的值併爲我提供工作解決方案。 有沒有辦法讓操作發生在所有列上,遵循這種模式。這意味着我可以避免明確地爲每個單獨的列聲明它。 可以說我有22列。一個是費率,一個是Qtr,其餘的指標像Premium,Claim等。我不介意重新設置索引並將Qtr和費率納入其中。這樣,假設我們仍然可以在計算中使用它們,那麼我們就可以推斷出所有列的操作都會發生。打開想法。 – Dickster

+0

這絕對是我的一個很好的工作解決方案。希望有人會發現這個問題,並進行更pythonic或numpyesque操作。 – Dickster

+0

查看更新後的答案,但我認爲它不一定會讀得很好,如果您從DataFrame開始,因爲我不認爲它們是更簡單的方法。如果您認爲這回答您的問題,請將其標記爲已回答。 – seumas