python - 熊猫百分比变化 -
问题描述
我正在用熊猫创建一个百分比变化函数:
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
解决方案
您可以尝试使用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 为零 |
推荐阅读
- javascript - Angular 8 baseUrl 被消灭了
- xamarin - 在 Xamarin.Forms 中手动删除和添加元素到 App Shell 时如何暂停 UI / App Shell 更新?
- cytoscape.js - Cytoscape js - 每当单击节点时调用一个函数
- javascript - 赛普拉斯不处理异常
- laravel - 当响应是错误时,为什么承诺会进入 .then() ?- 拉拉维尔
- domain-driven-design - 聚合根的查询子项的存储库方法
- android - Android:没有cursorLoader的同一光标中的图像和视频路径
- mysql - 如何避免使用 Mysql 识别连字符时出错
- python - ImportError:无法从“json”(未知位置)导入名称“loads”
- linux - 通过寄存器将参数传递给 execve(2)