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

如何将指定年份集合追加匹配到dataframe的每一条原有记录中

DataFrame多列与指定列表生成笛卡尔积实现方案

核心需求是将原有DataFrame的每一行与年份列表的所有元素做匹配,生成二者的笛卡尔积,以下是两种最简实现方式:


前置准备

首先构造你的原始数据和待匹配的年份列表:

import pandas as pd

# 原始DataFrame(可直接替换为你自己的df)
df = pd.DataFrame([
    ['val1', 'val2'],
    ['val1', 'val3'],
    ['val2', 'val1'],
    ['val2', 'val3']
], columns=['col1', 'col2'])

# 待追加的年份集合
year_list = [1990, 1991, 1992]

方法1:assign + explode(推荐,Pandas 0.25+ 版本适用)

代码最简洁,无论原始DataFrame有多少列都可以直接复用:

result = df.assign(year=year_list).explode('year', ignore_index=True)

实现逻辑:先给每一行新增值为完整年份列表的year字段,再将列表类型的year字段拆分为多行,每一个列表元素对应一条独立记录。


方法2:临时字段笛卡尔积合并(兼容所有Pandas版本)

如果你的Pandas版本低于0.25不支持explode,可以用合并的方式实现:

# 把年份列表转成DataFrame
year_df = pd.DataFrame(year_list, columns=['year'])
# 给两个表新增相同的临时字段用于全匹配
df['tmp_key'] = 1
year_df['tmp_key'] = 1
# 合并后删除临时字段
result = pd.merge(df, year_df, on='tmp_key').drop('tmp_key', axis=1).reset_index(drop=True)

输出结果

两种方法最终得到的结果均符合需求:

col1col2year
val1val21990
val1val21991
val1val21992
val1val31990
val1val31991
val1val31992
val2val11990
val2val11991
val2val11992
val2val31990
val2val31991
val2val31992

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:54:02