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

Pandas基于其他列循环填充d、e列的问题求助

解决方案

问题分析

你填充e列时错误使用了shift()方法,该方法会取上一行的b值,这和你需要的“根据d值匹配c列,取对应行b值”的逻辑完全不符,导致结果错误。

正确实现步骤

核心思路是先建立c列到b列的映射关系,再通过这个映射快速填充d和e列:

  • 构建c到b的映射字典,键是c列的值,值是对应行的b列值
  • 填充d列:按你的规则匹配取值,留空无匹配的行
  • 填充e列:基于d列的值,用映射字典匹配对应b值

完整代码

import pandas as pd

# 初始化DataFrame
df = pd.DataFrame({
    "b":["1","2","3","4","5","6"],
    "c":["7", "8", "9","6","4","10"],
    "d":[""],
    "e":[""]
})

# 构建c到b的映射字典,用于快速查找
c_to_b = df.set_index('c')['b'].to_dict()

# 匹配你给出的d列预期:当c的值存在于b列中时,取该c值对应b行的c值
b_to_c = df.set_index('b')['c'].to_dict()
df['d'] = df['c'].apply(lambda x: b_to_c.get(x, ''))

# 填充e列:当d的值存在于c列中时,取对应行的b值
df['e'] = df['d'].apply(lambda x: c_to_b.get(x, ''))

print(df)

运行结果

b   c    d   e
0  1   7        
1  2   8        
2  3   9        
3  4   6   10    
4  5   4    6   4
5  6  10        

完全符合你的预期结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:40:44