如何基于第二个DataFrame的LDF值匹配origin列计算新value列?
问题描述
我有两个DataFrame:
第一个DataFrame结构如下:
value origin id Loss_2000_0 611264 2000 Loss_2000_1 644563 2000 Loss_2000_2 555245 2000 Loss_2000_3 572451 2000 Loss_2001_0 496761 2001 ... ... ... Loss_2014_1 68247 2014 Loss_2014_2 33820 2014 Loss_2014_3 63882 2014 Loss_2014_4 39578 2014 Loss_2014_5 51357 2014
第二个DataFrame结构如下:
LDF ult 1.273796 2000 1.045484 2001 1.066983 2002 1.094516 2003 1.068604 2004 1.112227 2005 1.098801 2006 1.093077 2007 1.123588 2008 1.135084 2009 1.182663 2010 1.202442 2011 1.229210 2012 1.355516 2013 1.386031 2014 2.122421
需要生成一个和第一个DataFrame结构一致的第三个DataFrame,其中value列的值根据origin列的年份,乘以第二个DataFrame中对应年份的LDF值(比如origin为2014时乘2.122421,origin为2013时乘1.386031)。
解决方案
以下是两种简洁的实现方式,假设第一个DataFrame名为df1,第二个名为df2:
方法1:使用map匹配计算
先统一类型后,直接通过map关联对应年份的LDF值并完成乘法:
# 将df2的索引转为整数(和df1的origin类型匹配) df2.index = df2.index.astype(int) # 复制原结构并计算新value df3 = df1.copy() df3['value'] = df1['value'] * df1['origin'].map(df2['LDF'])
方法2:使用merge关联计算
通过合并DataFrame的方式关联LDF值,再构造结果:
# 重置df2索引,将年份转为列 df2_processed = df2.reset_index().rename(columns={'index': 'origin'}) df2_processed['origin'] = df2_processed['origin'].astype(int) # 合并两个DataFrame并计算 merged_df = df1.merge(df2_processed, on='origin', how='left') df3 = merged_df.assign(value=merged_df['value'] * merged_df['LDF']).drop('LDF', axis=1) # 恢复原索引(保持结构一致) df3 = df3.set_index(df1.index)
两种方法最终都会得到与df1结构完全一致的df3,其中value列已完成对应年份的LDF乘法运算。
内容的提问来源于stack exchange,提问作者Meth
相关产品推荐
相关产品推荐

