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

解决Vega_dict函数生成的时序DataFrame重复存储及无法累积问题

解决Pandas时序数据累积重复问题

问题根源

  • Vega_dict函数内部错误地将全局df_vg与当前计算的单行数据合并,导致每次调用函数时,返回的DataFrame已包含之前的累积数据。
  • 外部代码连续两次调用Vega_dict()后再次执行concat,相当于把重复的累积数据二次合并,最终产生多条重复行。
  • 函数职责混乱:Vega_dict应仅负责生成当前时间点的单行统计数据,累积存储逻辑需放在函数外部。

修正方案

1. 重构Vega_dict函数

修改函数,使其仅返回当前时间点的单行DataFrame,移除内部不必要的concat操作:

def Vega_dict():
    Sum_CE_Vega = Final_df.loc[Final_df['instrumentType'] == 'CE', 'vega'].sum()
    Sum_PE_Vega = Final_df.loc[Final_df['instrumentType'] == 'PE', 'vega'].sum()
    # 直接构造单行DataFrame,简化逻辑
    Vega_df = pd.DataFrame({
        "Time": [Time],
        "Sum of OTM CE": [Sum_CE_Vega],
        "Sum of OTM PE": [Sum_PE_Vega]
    })
    return Vega_df

2. 外部维护累积时序数据

在函数外部初始化空的累积DataFrame,每次调用Vega_dict()获取新行后合并:

import pandas as pd
import time

# 初始化空的累积DataFrame
df_vg = pd.DataFrame(columns=["Time", "Sum of OTM CE", "Sum of OTM PE"])

# 模拟每20秒更新一次的循环(实际场景可根据触发逻辑调整)
while True:
    # 获取当前时间点的统计数据
    new_row = Vega_dict()
    # 合并新行到累积DataFrame
    df_vg = pd.concat([df_vg, new_row], ignore_index=True)
    # 打印当前累积结果
    print(df_vg)
    # 等待20秒
    time.sleep(20)

3. 避免重复的关键

  • 确保Vega_dict每次仅返回一行新数据,不包含历史累积内容。
  • 外部仅在每次更新时调用一次Vega_dict(),并将结果合并到累积DataFrame,禁止重复调用后再合并。

测试验证

运行代码后,每次循环会新增一行不同时间的统计数据,输出示例:

Time       Sum of OTM CE      Sum of OTM PE
0  20:14:32  176.90175243829978  166.3830493392582
1  20:14:52  176.93993499404044  166.3783648784774
2  20:15:12  177.00214567890123  166.3512345678901

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 01:25:04