如何基于两个DataFrame的条件生成并填充第三个DataFrame?
解决方案:基于DF1、DF2自动化填充DF3(Python + Excel实现)
一、需求梳理
核心计算逻辑:
- DF3的每个单元格值 = DF1对应技术类型的百分比值 × DF2对应技术类型的年度值 × 730(固定系数)
- 需覆盖多技术类型、2023-2030全日期范围,同时包含手动构建DF3的方法
二、Python实现方案
1. 手动构建DF3(搭建基础结构)
假设技术类型包含Geothermal、Solar、Wind等,日期范围为2023年1月至2030年12月:
import pandas as pd # 生成月度日期序列(每月第一天) dates = pd.date_range(start='2023-01-01', end='2030-12-01', freq='MS') # 定义技术类型列表 tech_types = ['Geothermal', 'Solar', 'Wind'] # 创建空DF3:日期为索引,技术类型为列 df3 = pd.DataFrame(index=dates, columns=tech_types) # 添加年份辅助列(用于匹配DF2的年度数据) df3['Year'] = df3.index.year
2. 自动化填充逻辑
假设DF1结构:Technology列 + Percentage列(如Geothermal对应0.7);DF2结构:Technology列 + 2023、2024...2030列(年度数值)
# 将DF2转为"技术-年份"长格式,简化匹配逻辑 df2_long = df2.melt(id_vars='Technology', var_name='Year', value_name='Annual_Value') df2_long['Year'] = df2_long['Year'].astype(int) # 合并DF1与转换后的DF2,得到每个技术+年份的计算因子 factor_df = pd.merge(df1, df2_long, on='Technology') # 遍历DF3行,匹配因子计算并填充 for idx, row in df3.iterrows(): current_year = row['Year'] current_factors = factor_df[factor_df['Year'] == current_year] for tech in tech_types: pct = current_factors[current_factors['Technology'] == tech]['Percentage'].values[0] annual_val = current_factors[current_factors['Technology'] == tech]['Annual_Value'].values[0] df3.loc[idx, tech] = pct * annual_val * 730 # 可选:移除年份辅助列 df3 = df3.drop('Year', axis=1)
三、Excel实现方案
1. 手动构建DF3结构
- 步骤1:在Sheet3(DF3)的A列生成日期序列:A2输入
2023/1/1,下拉填充至2030/12/1,设置单元格格式为Jan-23样式。 - 步骤2:在B1、C1、D1等单元格输入技术类型(如Geothermal、Solar、Wind)。
- 步骤3:添加年份辅助列(如Z列),Z2输入公式
=YEAR(A2),下拉填充,用于提取年份匹配DF2数据。
2. 自动化填充公式
假设DF1在Sheet1:A列=Technology,B列=Percentage;DF2在Sheet2:A列=Technology,B-I列=2023-2030年度值。
在DF3的B2(对应Jan-23的Geothermal)输入以下公式,向右、向下填充即可:
=VLOOKUP(B$1, Sheet1!$A:$B, 2, FALSE) * INDEX(Sheet2!$B:$I, MATCH(B$1, Sheet2!$A:$A, 0), MATCH($Z2, Sheet2!$1:$1, FALSE)) * 730
公式说明:
VLOOKUP(B$1, Sheet1!$A:$B, 2, FALSE):从DF1匹配对应技术的百分比INDEX(Sheet2!$B:$I, MATCH(B$1, Sheet2!$A:$A, 0), MATCH($Z2, Sheet2!$1:$1, FALSE)):从DF2匹配对应技术+年份的年度值- 最后乘以固定系数730
内容的提问来源于stack exchange,提问作者Chetan Patel
相关产品推荐
相关产品推荐

