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

Python Pandas:获取投资最大回撤起止日期的日期提取问题

提取Pandas DataFrame中最大回撤的起止日期问题

我正在遍历Pandas DataFrame,想要提取某笔投资最大回撤(dd)的开始和结束日期。以下是我编写的代码,我知道for循环的逻辑尚不完善,目前需要解决的是如何将DataFrame当前行的date列值存入变量。代码中大写标注的位置就是需要帮助的地方,感谢支持!

len_dd = 0.0
last_val = monthly_drawdown[-1]
max_monthly_drawdown_ringer = 0 
# 遍历月度回撤的所有值
for val in muni['max_monthly_drawdown']:
    # 如果当前值等于最大回撤...
    if val == max_monthly_drawdown:
        # 将标记置为1
        max_monthly_drawdown_ringer = 1
    # 如果当前月份不是回撤期,且之前处于包含最大回撤的回撤周期中
    if val == 0.0 and len_dd > 0.0 and max_monthly_drawdown_ringer == 1:
        # 提取结束日期并终止循环
        endate = CODE HERE TO PULL muni['date'] FOR CURRENT ROW IN FOR LOOP
        break
    # 如果当前处于回撤期
    if val < 0.0:
        # 增加回撤周期长度
        len_dd = len_dd + 1
    # 如果处于回撤周期的起始点
    if val < 0.0 and len_dd == 0:
        startdate = CODE HERE TO PULL muni['date'] FOR CURRENT ROW IN FOR LOOP
        len_dd = len_dd + 1
    # 如果当前是最后一个值,且处于包含最大回撤的回撤周期中
    if val == last_val and last_val < 0.0 and max_monthly_drawdown_ringer == 1:
        # 提取日期并终止循环
        endate = CODE HERE TO PULL muni['date'] FOR CURRENT ROW IN FOR LOOP
    # 如果当前月份不是回撤期
    if val == 0.0:
        # 重置回撤周期长度为0
        len_dd = 0

解决方法

你当前的问题是仅遍历了muni['max_monthly_drawdown']列的数值,无法直接关联到对应行的date列。可以通过enumerate同时获取遍历的索引和数值,再借助索引提取对应行的日期:

修改后的完整代码如下:

len_dd = 0.0
last_val = monthly_drawdown[-1]
max_monthly_drawdown_ringer = 0 
# 改用enumerate获取索引和对应值
for idx, val in enumerate(muni['max_monthly_drawdown']):
    if val == max_monthly_drawdown:
        max_monthly_drawdown_ringer = 1
    if val == 0.0 and len_dd > 0.0 and max_monthly_drawdown_ringer == 1:
        # 通过索引提取当前行的date
        endate = muni.loc[idx, 'date']
        break
    if val < 0.0:
        len_dd = len_dd + 1
    if val < 0.0 and len_dd == 0:
        # 通过索引提取当前行的date
        startdate = muni.loc[idx, 'date']
        len_dd = len_dd + 1
    if val == last_val and last_val < 0.0 and max_monthly_drawdown_ringer == 1:
        # 通过索引提取当前行的date
        endate = muni.loc[idx, 'date']
    if val == 0.0:
        len_dd = 0

如果你的date列是DataFrame的索引,可将muni.loc[idx, 'date']替换为muni.index[idx]。

补充说明:Pandas处理这类数据更推荐使用矢量化操作而非for循环,但上述代码先解决你当前的日期提取问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 13:55:23