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

如何按索引匹配将pandas小DataFrame的值填充到大DataFrame

错误写法原因
  • 第一种写法问题:df1.index.date和df2.index.date是长度不等的日期数组,直接用==做元素级对比时长度不匹配,才触发弃用告警;另外代码里写的df2.value2 == df1.value1是比较运算不是赋值运算,就算判断逻辑成立也不会修改列值。
  • 第二种写法问题:给DataFrame列赋值时传入的列表只有1个元素,和df2的索引长度不匹配,直接触发长度报错;且列表内的判断逻辑没有逐行做日期匹配,本身逻辑不成立。
  • 用iterrows()逐行遍历属于低效操作,pandas的向量化接口可以直接实现需求,不需要写循环。
正确实现代码

首先先确认两个DataFrame的索引为datetime类型,不是的话先做转换:

import pandas as pd
df1.index = pd.to_datetime(df1.index)
df2.index = pd.to_datetime(df2.index)

直接通过日期映射完成赋值,全程向量化操作,性能远高于逐行遍历:

# 将df2索引的时分秒归零,对齐df1的日期粒度后做值映射
df2['value2'] = df2.index.normalize().map(df1['value1'])

如果df1的索引是原生Python date类型而非pandas datetime类型,可以用提取日期的方式对齐:

date_map = pd.Series(df1['value1'].values, index=df1.index.date)
df2['value2'] = [date_map[d] for d in df2.index.date]
补充说明

如果df2中存在df1未覆盖的日期,上述代码会将对应行的value2填充为NaN。如果需要保留这部分行原有的value2值,可以改用combine_first做对齐填充:

date_aligned_s = df2.index.normalize().map(df1['value1'])
df2['value2'] = date_aligned_s.combine_first(df2['value2'])

执行后即可得到预期结果,所有同日期的行都会填充为df1中对应日期的value1值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:31:06