python - 在 Pandas 数据框中创建条件列
问题描述
我想创建一个计算列,如第 1 行所示,否则为 0
openOptions['Cash Reserve'] = (openOptions['Quantity'] * openOptions['Strike'] * 100)
openOptions['Cash Reserve'] = 0 if (openOptions['OptionType'] == 'C') else openOptions['Cash Reserve']
我收到一个错误:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我应该如何解决这个问题?
解决方案
您可以使用np.where()
,它类似于 numpy/Pandas 的 if-then-else 语句,如下所示:
openOptions['Cash Reserve'] = np.where(openOptions['OptionType'] == 'C',
0,
openOptions['Cash Reserve'])
或者,由于您的Cash Reserve
列已经设置并且您仅在某个条件下将其修改为 0,您也可以使用.loc[]
:
openOptions.loc[openOptions['OptionType'] == 'C', 'Cash Reserve'] = 0
甚至进一步简化,如下:
openOptions['Cash Reserve'][openOptions['OptionType'] == 'C'] = 0
推荐阅读
- sed - 如何使 sed 从管道中获取输入,并插入到文件中
- pointers - 实现结构时将指针作为函数参数
- amazon-web-services - 如何正确调整云实例的大小?
- c# - 为什么 Automapper 错误不包括目的地详细信息?
- uefi - 等待按键 GNU EFI
- angular - 为什么删除 BehaviourSubject 会导致我的服务延迟 3-4 秒?
- c - 抽象语法树的代数化简
- r - 在 R 中使用 mfrow:如何给每个子图一个不同的 y 标签和 x 轴一个标签
- javascript - 由于施加的力不正确,我的网格在页面加载时迅速消失?
- r - 如何为每个回归循环迭代向数据集添加新列?