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

Pandas如何将DataFrame某列值作为索引取值并赋值给新列

问题场景

操作流程:

  • 先将符合条件的索引值赋值给A列,调用df.ffill()对该列做向前填充处理
  • 后续需要把A列存储的值作为行索引,取出对应行的price列取值,赋值给expected列
  • 尝试使用代码df['expected']=df['price'][df['A']]实现该需求,但运行未得到正确结果
测试复现代码
import pandas as pd
import numpy as np
d={'trade_date':['2021-08-10','2021-08-11','2021-08-12','2021-08-13','2021-08-14','2021-08-15','2021-08-16','2021-08-17','2021-08-18','2021-08-19','2021-08-20',],'price':[2,12,8,10,11,18,7,19,9,8,12],'cond':[True,False,True,False,True,False,True,False,True,True,True]}
df = pd.DataFrame(d)
df.index=pd.to_datetime(df.trade_date)
df['A']=df.index.where(df['cond'])
df['A']=df['A'].ffill()
预期输出结果
trade_datepricecondAexpected
2021/8/102TRUE2021/8/102
2021/8/1112FALSE2021/8/102
2021/8/128TRUE2021/8/128
2021/8/1310FALSE2021/8/128
2021/8/1411TRUE2021/8/1411
2021/8/1518FALSE2021/8/1411
2021/8/167TRUE2021/8/167
2021/8/1719FALSE2021/8/167
2021/8/189TRUE2021/8/189
2021/8/198TRUE2021/8/198
2021/8/2012TRUE2021/8/2012
错误原因

原写法df['price'][df['A']]触发了pandas的索引对齐逻辑:用A列的日期值作为标签取price的子集时,返回结果的索引是A列的日期集合,和原DataFrame的行索引无法匹配,最终赋值会出现错位、空值问题。

正确实现代码

用map方法做标签到值的直接映射即可,不会触发索引对齐问题,运行结果和预期完全一致:

df['expected'] = df['A'].map(df['price'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:18:04