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

Pandas DataFrame基于前序ref1同ref2值生成新列的实现问题

实现代码

import pandas as pd
import numpy as np

# 构造原始DataFrame
df = pd.DataFrame({
    'ref1': [1,1,3,7,7],
    'ref2': [1,2,1,1,2],
    'value': [1,2,3,5,6],
})

# 步骤1:获取ref1按出现顺序的唯一列表,构造当前ref1到前一个ref1的映射关系
sorted_ref1 = df['ref1'].unique()
prev_ref1_map = {sorted_ref1[i]: sorted_ref1[i-1] for i in range(1, len(sorted_ref1))}

# 步骤2:构造每个ref1分组下,ref2到对应value的映射字典
ref2_value_map = df.groupby('ref1').apply(lambda g: g.set_index('ref2')['value'].to_dict()).to_dict()

# 步骤3:逐行匹配生成new_value列
df['new_value'] = df.apply(
    lambda row: ref2_value_map.get(prev_ref1_map.get(row['ref1']), {}).get(row['ref2'], np.nan),
    axis=1
)

输出结果

运行代码后得到的df如下:

ref1  ref2  value  new_value
0     1     1      1        NaN
1     1     2      2        NaN
2     3     1      3        1.0
3     7     1      5        3.0
4     7     2      6        NaN

逻辑说明

  • 先按出现顺序提取所有唯一的ref1值,给每个ref1匹配它前一个出现的ref1值
  • 提前把每个ref1分组下的ref2和对应value存储为字典,避免重复分组查询,提升运行效率
  • 逐行匹配规则:先找当前行ref1对应的前一个ref1,再去前一个ref1的映射字典里找相同ref2对应的value,找不到匹配项就返回NaN

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:45:07