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
相关产品推荐
相关产品推荐

