Pandas使用pct_change()遇除数为0返回inf的高效处理方法问询
实现方案
pandas 内置的pct_change()目前没有提供除数为0时的默认替换参数,你可以用以下两种高效的向量化方案实现需求,不需要手动拆分计算分子分母:
方案1:替换pct_change()返回的inf值
pct_change()返回inf的唯一场景是上一期数值为0,此时你的需求等价于将除数替换为1,计算结果刚好等于当期数值,直接做值替换即可:
import numpy as np result = df_num.pct_change().iloc[-1].replace(np.inf, df_num.iloc[-1])
输出结果:
col1 2.0 col2 3.0 Name: 1, dtype: float64
方案2:直接按公式实现,除数层替换0
如果你不想依赖inf识别的逻辑,也可以直接按变化率公式链式调用实现,适配任意行数的变化率计算:
result = (df_num.diff() / df_num.shift().replace(0, 1)).iloc[-1]
两种方案的性能都和原生pct_change()基本一致,都是pandas底层的向量运算,远快于手动逐行计算的实现。
内容的提问来源于stack exchange,提问作者Ashik Mydeen
相关产品推荐
相关产品推荐

