程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

使用 pandas 计算基于多个标准的新行

发布于2022-10-06 22:13     阅读(824)     评论(0)     点赞(28)     收藏(3)


我有一个 df,我正在尝试根据计算填充一个新列。下面是一个例子。

import pandas as pd 
import numpy as np
df = pd.DataFrame(
        {"Quantity" :[4721,1647],
         "Total" : [236.05,82.35]},
        index = [1,2])

df["CPS Gross"]= (df["Total"]/df["Quantity"])

conditions = [df["CPS Gross"] == 0.05]
values = [0.03]

df["CPS Calc"] = np.select(conditions,values)

print(df)

有人可以向我解释为什么第二行不符合条件测试但第一行即使它们都符合 0.05 的标准?

任何帮助将非常感激


解决方案


我无法评论您的原始帖子,所以我会给您一个答案。

第二行不满足条件的原因是浮点数不是精确类型尽管操作 82.35/1647 的实际结果是 0.05,但如果您在 Python 上检查它,您会发现它给出的结果是 0.0499999999999999996,这并不完全是 0.05。这就是为什么82.35/1647 == 0.05是假的原因......因为它真的是假的!(在 Python 中)

您可以尝试的一种解决方案是使用某种方法来考虑这种行为,例如math.isclose(). 它不检查两个值是否完全相同,而是检查两个值是否在一定范围内彼此接近(称为容差)。

from math import isclose

...

conditions = [ws['New Gross'].apply(lambda x: isclose(x, 0.05, abs_tol=1e-8))]
values = [0.03]

df["CPS Calc"] = np.select(conditions, values)

如果你检查你会看到现在两行都被选中了!



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/1793553/817bb9b90e6ef0f726ea/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

28 0
收藏该文
已收藏

评论内容:(最多支持255个字符)