如何在DataFrame中插入带条件函数的买卖价差列?
问题分析与解决
原代码存在三个核心问题:
- 判断逻辑错误:
type in mt_trades['type'] == 'BUY'是错误的条件写法,你需要判断的是当前行的交易类型是否为BUY,而非判断参数是否在整列的判断结果集合中。 - 函数无返回值:计算价差后没有用
return返回结果,导致apply无法获取有效计算值。 - 错误操作整个DataFrame:函数里直接操作全表,而非处理当前行的单条数据。
修正方案1:使用apply逐行处理
修改函数逻辑,让它接收每行数据,判断当前行交易类型后返回计算结果:
def pl_gap(row): if row['type'] == 'BUY': return row['close_price'] - row['open_price'] else: return row['open_price'] - row['close_price'] mt_trades['pl_gap'] = mt_trades.apply(pl_gap, axis=1)
注意必须添加axis=1,指定按行应用函数。
更高效方案:使用numpy.where向量化运算
Pandas中逐行apply效率偏低,推荐用向量化运算直接处理整列,代码更简洁且性能更优:
import numpy as np mt_trades['pl_gap'] = np.where( mt_trades['type'] == 'BUY', mt_trades['close_price'] - mt_trades['open_price'], mt_trades['open_price'] - mt_trades['close_price'] )
这种方式直接对整列批量运算,适合大数据量场景。
内容的提问来源于stack exchange,提问作者reggie_b
相关产品推荐
相关产品推荐

