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新手。谢谢你。