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

如何匹配pandas DataFrame与ndarray的日期并提取对应code到新列表

问题原因分析
  • 第一段代码错误点:
    1. 嵌套遍历两个序列的逻辑冗余,时间复杂度极高,不适用于近30万条数据的处理场景
    2. 匹配成功后append的是全量的raw_data.codes Series,不是当前匹配行对应的code值,导致最终列表里全是相同的全量code序列
  • 第二段代码错误点:
    1. 循环变量混淆:for j in reb_dates取到的j是reb_dates里的日期字符串,不是索引,reb_dates[j]属于用值当索引取值,逻辑完全错误
    2. 同理for q in raw_data.Dates取到的q是日期值,raw_data['Dates'][q]是用日期值当行索引取数,你的DataFrame行索引不是日期的话必然抛出KeyError
最优解决方案

pandas内置的向量化操作远快于自行编写的嵌套循环,以下实现仅需几行代码即可完成需求,执行效率比嵌套循环高数十倍。

前置处理:统一日期格式(避免字符串格式不匹配)

先把两个数据源的日期统一处理成无多余空格的字符串格式,避免隐形不匹配:

# 处理DataFrame的日期列,转字符串并去除前后空格
raw_data['Dates'] = raw_data['Dates'].astype(str).str.strip()
# 处理ndarray的日期列表,去除前后空格
reb_dates = np.array([date_str.strip() for date_str in reb_dates])

方案1:提取所有匹配日期的code到一个一维列表

filtered_codes = raw_data[raw_data['Dates'].isin(reb_dates)]['code'].tolist()

方案2:按日期分组,存储每个匹配日期对应的code列表

如果需要按日期区分对应的code,用groupby聚合即可:

code_by_date = raw_data[raw_data['Dates'].isin(reb_dates)]\
    .groupby('Dates')['code'].apply(list).to_dict()
# 如果需要转为列表格式,直接取list(code_by_date.values())即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:54:05