python - 根据条件更改列的符号
问题描述
输入DF:
value1, value2
123L, 20
222S, 10
222L, 18
我想在 volumnvalue2
中value1
生成L
字母负数的值,所以我试图将它们乘以 -1
预期结果:
value1, value2
123L, -20
222S, 10
222L, -18
我的代码
if np.where(DF['value1'].str.contains('L', case=False)):
DF['value2'] = DF['value2'] * -1
但在输出中,我收到列value2
负数的所有值。如何仅对选定的行实施此条件?谢谢
解决方案
您可以使用布尔索引loc
:
df.loc[df['value1'].str[-1] == 'L', 'value2'] *= -1
或者,使用pd.Series.mask
:
df['value2'].mask(df['value1'].str[-1] == 'L', -df['value2'], inplace=True)
如果您热衷于使用np.where
,这是可能的,但很冗长:
df['value2'] = np.where(df['value1'].str[-1] == 'L', -df['value2'], df['value2'])
通知np.where
已经矢量化,您不应将其与if
.
推荐阅读
- mysql - MySQL - 如何在 JSON 中查找出现次数?
- javascript - 如何在不从 reactjs 中的 firebase 数据库重新加载页面的情况下获取数据
- blazor - 如何查看组件的层次结构
- monit - 使用监控工具监控多台服务器
- python - sigma 的 pi 分布的奇怪增加增加了重复 Python 的时间
- javascript - 如何将 Promise.all 与多个 Firestore 查询一起使用
- node.js - 带有 Typeorm 的 NestJS 无法解决依赖关系
- reactjs - 为什么 websocket 关闭并打开另一个?
- ruby-on-rails - Rails 应用程序中的 DeviseTokenAuth
- php - 我的图标选择器按钮提交我的 HTML 表单