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
相关产品推荐
相关产品推荐

