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

如何基于另一DataFrame列条件匹配创建允许重复值的DataFrame新列

问题原因分析

原来的写法不符合Pandas的索引对齐规则:df1.loc[:, 'datetime'] == df2.loc[:, 'datetime'] 是按两个Series的行索引逐行对比,只有索引位置相同且时间值相等的行才会返回True,因此你只能拿到df2中索引为0的value3值,赋值回df1时自然只有索引为0的行能匹配到值,其余行因为索引不匹配被赋值为NaN,并非.loc方法本身错误。

高效解决方案

以下两种方法均为Pandas内置的向量化操作,无嵌套循环,性能远高于遍历写法,且不会触发官方警告。

方法1:map映射(推荐,单字段匹配场景最简洁)

因为df2的datetime列无重复值,可以直接构建时间到目标值的映射关系,直接映射赋值:

# 构建以datetime为索引、value3为值的映射Series
value3_map = df2.set_index('datetime')['value3']
# 为df1匹配赋值
df1['value3'] = df1['datetime'].map(value3_map)

方法2:merge左连接(适合多字段匹配场景)

如果需要同时从df2匹配多个字段,可以用左连接实现:

# 仅关联需要的列,避免df1和df2同名字段被覆盖
df1 = df1.merge(
    df2[['datetime', 'value3']],  # 可按需添加更多要匹配的列
    on='datetime',
    how='left'
)
运行结果

两种方法得到的df1均符合预期:

datetime  value1 value2 value3
0 2000-03-10 17:03:00       2      x      p
1 2000-03-10 17:03:00       3      y      p
2 2000-03-10 17:04:00       4      z      d

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:45:03