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

3

我有以下 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

假设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)

第二次更新,您可以将计算提取到一个函数中,并在列表推导式中执行该过程。
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'])]

这太棒了,谢谢。计算出正确的值并为我提供了一个可行的解决方案。不过,有没有一种方法可以按照这个模式在所有列上执行操作。这意味着我可以避免为每个单独的列显式声明它。假设我有22列。其中一个是Rate,一个是Qtr,其余的是指标,如Premium、Claim等。我不介意重新设置索引并将Qtr和Rate放入其中。这样假设我们仍然可以在计算中使用它们,那么我们就可以推断该操作要在所有列上执行。欢迎提出想法。 - Dickster
这绝对可以让我得到一个好的工作解决方案。希望有人能够注意到这个问题,并提供更符合Python或NumPy风格的操作。 - Dickster
请查看更新的答案,虽然我认为它可能不太好读,但如果你从给定的DataFrame开始,我认为没有更简单的方法。如果你认为这回答了你的问题,请将其标记为已回答。 - seumas
采用了您的第一个更新。对于刚接触Python的人来说,阅读起来更加直观易懂。谢谢。 - Dickster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接