Pandas DataFrame - 基于列子集的计算列

时间:2013-01-31 10:48:44

标签: dataframe pandas calculated-columns

我有以下DataFrame

                           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)

实际上我有很多专栏,我希望进行这种计算。

1 个答案:

答案 0 :(得分:0)

如果df是您的数据框的名称而c是您的常量,请尝试:

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

更新评论,我相信有更多的pythonic方法可以做到这一点,但这有效:

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

第二次更新,您可以将计算提取到一个函数中,并在列表推导中执行该过程

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'])]