python - numpy.where 与 pandas.Series.map
问题描述
我想知道这两种方法,我应该使用哪一种……还是有更好的方法?
df = pd.DataFrame({'values' : [1, 27, 256, 312, ...]})
df['clip_values'] = df['values'].map(lambda x : 20 if x > 20 else x)
df['clip_values_v2'] = np.where(df['values'] > 20, 20, df['values'])
谢谢
解决方案
不确定更好,这里有一个clip
-
df['clip_values'] = df['values'].values.clip(max=20)
大数据的计时 -
In [172]: df = pd.DataFrame({'values' : np.random.randint(0,100,(1000000))})
In [173]: %timeit df['clip_values'] = df['values'].map(lambda x : 20 if x > 20 else x)
1 loop, best of 3: 193 ms per loop
In [174]: %timeit df['clip_values_v2'] = np.where(df['values'] > 20, 20, df['values'])
100 loops, best of 3: 6.12 ms per loop
In [175]: %timeit df['clip_values_v3'] = df['values'].values.clip(max=20)
100 loops, best of 3: 2.95 ms per loop
推荐阅读
- sql - 使用 Node 和 DB2 将多个 OR 链接到 WHERE 子句
- excel - 如何检查excel单元格是否从选择下拉选项更改
- reactjs - 在更新组件之前进行 React 渲染
- javascript - 错误无法读取未定义的属性“Lon”
- asp.net-core - asp.net 核心不是依赖注入 .net 框架 4.5.1 库
- python - Docker 身份验证中的 Flask + Bokeh
- python - 如何使用 pandas 制作新的 df 列以使用正则表达式获取列名和值?
- html - HTML/SQL 表格格式化
- jquery - .每个都不会不断循环
- vb.net - 如何使用 vb.net 获取数字的百分比