首页 > 解决方案 > 熊猫百分比变化 -

问题描述

我正在用熊猫创建一个百分比变化函数:

def percentchange(today, yest, vl):

   r = vl if yest==0 else ((today-yest)/yest)*100
   return r

df['newcol'] = percentchange(df['col2'], df['col1'], -999)

要按零错误处理 div,如果存在零,我想将列输出设置为 'vl' == -999。

这给出了“ValueError:系列的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。”

帮助表示赞赏,因为我不确定在谷歌搜索后下一步该做什么。

         Contract Name         Last Trade Date  Strike  Last Price  col1  col2  Bid-Ask Spread % Volume Open Interest
0   QQQ210920C00270000   2021-09-10 9:54AM EDT   270.0      111.44  0.0  0.0               0.0     10            10
1   QQQ210920C00280000  2021-09-20 12:16AM EDT   280.0       97.66  0.0  0.0               0.0      0             0
2   QQQ210920C00305000  2021-09-20 12:16AM EDT   305.0       69.81  0.0  0.0               0.0      0             0
3   QQQ210920C00310000  2021-09-20 12:16AM EDT   310.0       65.14  0.0  0.0               0.0      0             0
4   QQQ210920C00325000  2021-09-01 10:11AM EDT   325.0       57.44  0.0  0.0               0.0      6             0

标签: pythonpandas

解决方案


您可以尝试使用numpy.where

import pandas as pd
import numpy as np
df = pd.DataFrame({
    'col2' : [4,7,3],
    'col1' : [1,2,0],
})
df['newcol'] = np.where(df['col1']==0, -999, (df['col2']-df['col1'])/df['col1']*100)
col2 col1 纽科尔 计算理解
0 4 1 300 ( (4-1)/1) *100
1 7 2 250 ( (7-2)/2) *100
2 3 0 -999 col1 为零

推荐阅读