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

如何在循环中依据ID和日期双条件匹配数据并填充数据表

解决ID与日期匹配填充Power数据的高效方法

方法一:Excel公式实现(适合小数据集手动处理)

针对目标表中每个ID列的单元格,使用INDEX+MATCH组合公式判断日期是否在运营区间内,匹配对应Power值:

以目标表El_Bel列的B2单元格为例,输入公式后下拉填充:

=IF(AND($A2>=INDEX(源数据!$D:$D,MATCH("El_Bel",源数据!$A:$A,0)),$A2<=INDEX(源数据!$E:$E,MATCH("El_Bel",源数据!$A:$A,0))),INDEX(源数据!$B:$B,MATCH("El_Bel",源数据!$A:$A,0)),"")
  • 替换公式中的"El_Bel"为对应列的ID(如"El_Opo"、"El_Tur")即可适配其他列
  • 公式逻辑:先定位ID在源数据中的行,取出运营起止日期,判断当前Date是否在区间内,是则返回Power值,否则留空

如果源数据量较大,也可以用XLOOKUP简化多条件判断:

=IF(AND($A2>=XLOOKUP("El_Bel",源数据!$A:$A,源数据!$D:$D),$A2<=XLOOKUP("El_Bel",源数据!$A:$A,源数据!$E:$E)),XLOOKUP("El_Bel",源数据!$A:$A,源数据!$B:$B),"")

方法二:Python Pandas批量处理(适合大数据集自动化)

如果需要处理批量数据,用Pandas可以高效完成数据展开、透视和匹配:

import pandas as pd

# 1. 读取源数据和目标表(实际场景可替换为pd.read_excel/pd.read_csv)
source_df = pd.DataFrame({
    "ID": ["El_Bel", "El_Opo", "El_Tur"],
    "Power": [344, 256, 400],
    "Starting_date": [1983, 1987, 2019],
    "Shutting_down_date": [2030, 2027, 2049]
})

target_df = pd.DataFrame({
    "Date": [2017, 2018, 2019, 2020, 2021]
})

# 2. 展开每个ID的运营日期范围
expanded_rows = []
for _, item in source_df.iterrows():
    # 生成运营区间内的所有年份
    years = range(item["Starting_date"], item["Shutting_down_date"] + 1)
    expanded_rows.extend([{"Date": y, "ID": item["ID"], "Power": item["Power"]} for y in years])

expanded_df = pd.DataFrame(expanded_rows)

# 3. 透视成目标表的宽格式,合并到目标表
pivot_result = expanded_df.pivot(index="Date", columns="ID", values="Power").reset_index()
final_df = target_df.merge(pivot_result, on="Date", how="left").fillna("")

print(final_df)
  • 代码逻辑:先将每个ID的运营区间展开为「年份-ID-Power」的行数据,再透视成目标表的列格式,最后与目标表按Date合并,空值留空
  • 此方法可处理上万条数据,且支持后续批量更新源数据后快速重新生成结果

内容的提问来源于stack exchange,提问作者bLanton70

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 09:50:26