You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于第二个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 09:24:20