在pandas DataFrame中对行值计算并插入新列的最优方法是什么
for循环逐行遍历不是最优实现方式,pandas的向量化操作底层由C实现,运行效率远高于Python层的循环逻辑,数据量越大性能优势越明显。
你可以直接使用shift()方法将PRICE列向下偏移1位,直接做向量除法即可完成计算:
# 仅含单支股票数据时使用 df['CHANGE_RATE'] = df['PRICE'] / df['PRICE'].shift(1)
如果你的数据集后续会加入多支不同TICKER的行情数据,为了避免跨股票计算错误,建议按TICKER分组后再计算:
# 多支股票场景,分组后计算 df['CHANGE_RATE'] = df.groupby('TICKER')['PRICE'].apply(lambda x: x / x.shift(1))
计算后第一行因为没有上一行的参考数据,会默认返回NaN,你可以根据业务需求追加fillna()方法自定义填充值,比如需要将第一行变化率设为1,修改语句为df['CHANGE_RATE'] = (df['PRICE'] / df['PRICE'].shift(1)).fillna(1)即可。
以你给出的示例数据为例,默认计算结果如下:
| DATE | TICKER | PRICE | CHANGE_RATE |
|---|---|---|---|
| 2016-01-02 | AA | 10 | NaN |
| 2016-01-03 | AA | 11 | 1.1 |
| 2016-01-04 | AA | 12 | ≈1.0909 |
内容的提问来源于stack exchange,提问作者user3235456
相关产品推荐
相关产品推荐

