DataFrame-基于列子集计算的列

DataFrame-基于列子集计算的列,dataframe,pandas,calculated-columns,Dataframe,Pandas,Calculated Columns,我有以下数据帧 Qtr Premium Claim Rate Type Code A 3 14 3552.77 100991.7 0.004017 3 15 5610.67 105763.6 0.00401

我有以下数据帧

                           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和费率的相关值,但更新保费和索赔的值

例如:

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

事实上,我有很多列需要进行此计算。

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列。一个是费率,一个是Qtr和其他指标,如保费、索赔等。我不介意重新设置索引并将Qtr和费率放入其中。这样,假设我们仍然可以在计算中使用它们,那么我们可以推断操作将针对所有列进行。对想法持开放态度。这无疑为我提供了一个很好的工作解决方案。希望有人能发现这个问题,并提出一个更具pythonic或numpyesque风格的操作。请参阅更新的答案,尽管我不认为它读起来一定很好,但如果您从DataFrame开始,我不认为他们的操作更简单。如果您认为这回答了您的问题,请将其标记为已回答。继续您的第一次更新。以更直观的方式阅读,特别是对于python新手。谢谢你。