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

基于另一DataFrame的上一季度与同ID在Pandas中新增列

解决方案

核心思路是先建立季度与上一季度的映射关系,再通过ident+上一季度的组合去df_test中匹配对应的file值。

先修正原代码笔误

原代码中df.ident是错误写法,需改为df_test.ident,否则会触发变量未定义错误。

步骤1:构建季度映射字典

利用你提供的quarters有序列表,创建一个可快速查询上一季度的字典:

quarter_map = {q: prev_q for q, prev_q in zip(quarters[1:], quarters[:-1])}

这个字典的键为当前季度,值为对应上一季度,比如'2023q1'对应'2022q4','2022q4'对应'2022q3'。

步骤2:为df_test2添加上一季度列

用上述映射字典,给df_test2新增prev_quarter列,存储每行对应的上一季度:

df_test2['prev_quarter'] = df_test2['quarter'].map(quarter_map)

步骤3:构建df_test的查询映射

把df_test转换成以(ident, quarter)为键、file为值的字典,实现O(1)时间复杂度的快速查找:

file_lookup = df_test.set_index(['ident', 'quarter'])['file'].to_dict()

步骤4:填充df_test2的file列

通过apply函数,结合ident和prev_quarter去查询字典,得到对应的file值:

df_test2['file'] = df_test2.apply(lambda row: file_lookup.get((row['ident'], row['prev_quarter'])), axis=1)

完整可运行代码

import pandas as pd

quarters = ['2021q1', '2021q2', '2021q3', '2021q4', '2022q1',
            '2022q2', '2022q3', '2022q4', '2023q1', '2023q2']

# 修正笔误后的df_test初始化
df_test = pd.DataFrame(data=None, columns=['file', 'quarter', 'ident'])
df_test.file = ['file_1', 'file_1_v2', 'file_2_old', 'file_2_new', 'file_3']
df_test.quarter = ['2022q4', '2023q2', '2022q2', '2022q3', '2023q1']
df_test.ident = [1, 1, 2, 2, 3]

df_test2 = pd.DataFrame(data=None, columns=['quarter', 'ident'])
df_test2.quarter = ['2023q1', '2022q4', '2023q2']
df_test2.ident = [1, 2, 3]

# 构建季度映射字典
quarter_map = {q: prev_q for q, prev_q in zip(quarters[1:], quarters[:-1])}

# 添加上一季度列
df_test2['prev_quarter'] = df_test2['quarter'].map(quarter_map)

# 构建查询字典
file_lookup = df_test.set_index(['ident', 'quarter'])['file'].to_dict()

# 填充file列
df_test2['file'] = df_test2.apply(lambda row: file_lookup.get((row['ident'], row['prev_quarter'])), axis=1)

# 验证结果
print(df_test2['file'].tolist())
# 输出:['file_1', 'file_2_new', 'file_3']

补充说明

  • 若df_test中存在同一ident+quarter对应多个file的情况,set_index会保留最后一行的file值;如需处理重复值,可先对df_test按ident+quarter去重。
  • 字典查询的方式对大型数据集更高效,比多次merge操作的时间复杂度更低。

内容的提问来源于stack exchange,提问作者Marcus K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 22:15:34