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

Python矩阵迭代处理:匹配Ex-date对第二张DataFrame对应行扣减Div值

实现方案

我们可以用pandas内置的近似匹配方法merge_asof实现需求,效率远高于手动循环迭代,具体实现代码和说明如下:

前置假设

  • 存储Ex-date和Div对应关系的DataFrame命名为div_df,包含两列Ex-date、Div
  • 待处理的矩阵DataFrame命名为data_df,首列为Ex-date,其余列为需要执行减法的数值列

完整实现代码

import pandas as pd

# 步骤1:对两个DataFrame的Ex-date列做升序排序,merge_asof要求排序后才可执行近似匹配
div_df_sorted = div_df.sort_values("Ex-date", ignore_index=True)
data_df_sorted = data_df.sort_values("Ex-date", ignore_index=True)

# 步骤2:执行近似匹配,匹配最近的Ex-date对应的Div值
# direction参数可调整匹配规则:nearest=最近值,backward=找小于等于当前值的最近值,forward=找大于等于当前值的最近值
# 如需限制匹配误差阈值可加tolerance参数,例如tolerance=0.001表示仅允许Ex-date差值小于0.001的匹配
matched_df = pd.merge_asof(
    data_df_sorted,
    div_df_sorted,
    on="Ex-date",
    direction="nearest"
)

# 步骤3:对除首列外的所有数值列减去对应Div值
value_cols = data_df_sorted.columns[1:]
matched_df[value_cols] = matched_df[value_cols].sub(matched_df["Div"], axis=0)

# 步骤4:删除辅助用的Div列,得到最终结果
final_df = matched_df.drop(columns=["Div"])

注意事项

如果匹配后出现Div为空的情况,说明对应行没有匹配到符合条件的Ex-date,该行数值不会被修改,符合常规业务逻辑。如果需要过滤无匹配的行,可在步骤2后加matched_df = matched_df.dropna(subset=["Div"])即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:48:04