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

如何用另一DataFrame的列过滤目标DataFrame 二者索引不同且第二个数据量小

问题解决方法

错误原因

  • 直接执行file.Time == time报错的核心原因:pandas进行Series逐元素比较时要求两个对象的索引完全对齐,你的file有30398行、time只有70行,二者索引完全不一致,因此触发该报错。
  • 原有代码的额外逻辑问题:若time是DataFrame类型,for i in time遍历的是DataFrame的列名,而非你需要的每行时间值,也会导致匹配失败。

修复方案

我们可以用pandas自带的isin()方法实现批量值匹配,同时提取公共过滤条件减少重复计算,相比循环效率提升明显,调整后代码如下:

def FilteringData():
    # 先提取需要匹配的时间列表,假设time中存储时间的列名为TIME,若列名不同自行替换
    time_match_list = time['TIME'].tolist()
    min_expiry = file.EXPIRY.min()
    # 提取公共过滤条件,减少重复计算
    base_condition = (file.EXPIRY == min_expiry) & (file.OPTION_TYPE == op) & (file.TIME.isin(time_match_list))
    
    # 分别筛选三个条件的数据
    con_a = file[base_condition & (file.STRIKE_PRICE == str(main_strike))]
    con_b = file[base_condition & (file.STRIKE_PRICE == str(add_strike))]
    con_c = file[base_condition & (file.STRIKE_PRICE == str(sub_strike))]
    
    # 如果你需要按每个时间点拆分存储结果,可以再分组,输出格式和原代码一致
    # con_a = [group for _, group in con_a.groupby('TIME')]
    # con_b = [group for _, group in con_b.groupby('TIME')]
    # con_c = [group for _, group in con_c.groupby('TIME')]
    return con_a, con_b, con_c

con_a, con_b, con_c = FilteringData()

注意事项

如果time本身就是存储时间的Series而非DataFrame,提取匹配列表的代码改为time_match_list = time.tolist()即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:36:02