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

Pandas中按比较条件从另一DataFrame追加列填充值的实现问题

问题原因

现有循环仅遍历了df2的前3组相邻时间区间[0,1)、[1,2)、[2,3),未覆盖Time≥3的区间,因此这部分行的Value值保留初始的NaN。

解决方案

方案1:修改原有循环逻辑

在原有循环结束后补充对最后一个区间的赋值即可:

import pandas as pd
import numpy as np

df=pd.DataFrame(np.arange(0, 5, 0.3), columns=['Time'])
df2 = pd.DataFrame({'Time': [0, 1, 2, 3], 'Value': [6, 8, 9, 6]})

df["Value"] = np.nan
for t1, t2, v in zip(df2["Time"].values[:-1], df2["Time"].values[1:], df2["Value"].values[:-1]):
    df.loc[(df["Time"] >= t1) & (df["Time"] < t2), "Value"] = v
# 补充赋值Time≥3的行
df.loc[df["Time"] >= df2["Time"].iloc[-1], "Value"] = df2["Value"].iloc[-1]

print(df)

方案2:使用pandas内置merge_asof实现(更高效,无需循环)

merge_asof可以自动匹配左表Time对应的右表中最近的小于等于的Time值,完全匹配需求,适合处理数据量较大的场景:

import pandas as pd
import numpy as np

df=pd.DataFrame(np.arange(0, 5, 0.3), columns=['Time'])
df2 = pd.DataFrame({'Time': [0, 1, 2, 3], 'Value': [6, 8, 9, 6]})

# merge_asof要求参与匹配的列均为升序排列,提前排序保证兼容性
df = df.sort_values("Time")
df2 = df2.sort_values("Time")

df = pd.merge_asof(df, df2, on="Time")
print(df)

两种方案运行后均会得到预期输出结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:36:08