python - 给定值列表的 Pandas 自定义舍入
问题描述
我正在尝试找到一种聪明、直接的方法来在给定一组值的情况下舍入一列整数数据。这是我的示例数据
import pandas as pd
df = pd.Series([11,16,21, 125])
假设我想使用一个名为custom_round
. 这样,当应用四舍五入时,原始系列中的每个值都被四舍五入到最接近的值,或者如果 已经大于最大值,则将它们降低到该最大值。
rounding_logic = pd.Series([15, 20, 100])
df = pd.Series([11,16,21]).apply(lambda x: custom_round(x, round_list=rounding_logic))
之后 df 现在是pd.Series([15, 20, 100, 100])
.
我可以想到一些非常低效和丑陋的 if else 语句,但我怀疑必须有一个更简单的方法。我已经看到自定义舍入答案,其目标是舍入到最接近的 n,给定一些基数,例如Pandas 舍入到最接近的“n”,但没有解决我的特殊情况。
解决方案
您可以使用以下功能cut
:
df = pd.Series([11,16,21, 125])
rounding_logic = pd.Series([15, 20, 100])
labels = rounding_logic.tolist()
rounding_logic = pd.Series([-np.inf]).append(rounding_logic) # add infinity as leftmost edge
pd.cut(df, rounding_logic, labels=labels).fillna(rounding_logic.iloc[-1])
# get bins, assign labels and fill all values that greater than 100 with 100
输出:
0 15
1 20
2 100
3 100
dtype: category
Categories (3, int64): [15 < 20 < 100]
推荐阅读
- javascript - 从对象数组中查找字符串中的数值并进行计算
- php - 如何处理被编码两次的 JSON?
- redis - Redis:特定 SMEMBERS 的排序集
- node.js - 状态码:Heroku 上托管的 React 前端中不允许出现 405
- javascript - StaticInjectorError(AppModule)[NgForOf -> TemplateRef]
- python - 将接收到的数据传递给python中的“输入”函数
- c# - 如何在 MYSQL 数据阅读器中转换 3 倍 int?
- sql - 编译 SQLCLR 函数期间出现 NullReferenceException
- javascript - 是否可以将 nglAccordionSection 手风琴的标签作为组件或 html 元素而不仅仅是文本?
- spring-boot - 无法从命令行配置数据源