迷茫Python 2023-01-05 17:49 采纳率: 100%
浏览 45
已结题

python/pandas 计算 数值 信息熵值

想计算信息熵值,结果 output的是 nan
问题准备:
图为sheet_new dataframe 格式

img

举例:
若某甲仅在一家药店留有购药记录,其信息熵值为0,因其p=1。
若某甲在不同药店的购药金额为[10,30,60],其信息熵值为
'''-(0.1 * np.log2(0.1) + 0.3 * np.log2(0.3) + 0.6 * np.log2(0.6))''',即1.295461844238322。

思路:

#想计算每一个 Buyer 的信息熵值
#想定义 信息熵值
def infor(sheet_new):
    a = sheet_new.values / 100
    return sum(np.log2(a) * a * (-1))
#尝试计算BID0001 的信息熵值
print(infor(sheet_new.BID0001))
#输出结果为   nan 并有警告 但没报错

可能我的思路有误
希望大家帮忙解答
谢谢!

  • 写回答

1条回答 默认 最新

  • 不想秃头的夜猫子 2023-01-05 23:32
    关注

    所谓信息熵描述了信息源各可能事件发生的不确定性。试想若某人仅在一家药店购药,则他的行为是确定的;而若在多家药店购药,则存在一定的不确定性,需要通过博主上面给出的公式计算。以上就是对这道题的理解。

    解题思路:
    首先,判断每一个buyer(BID00i)是否在一家药店购药,也就是是判断每一列的非零值是否不唯一;
    第二,若buyer仅在一家药店购药,则范围信息熵值为0;
    第三,若buyer在多家药店购药,则按上述公式计算。给一个简单的编程思路:首先循环遍历每列,把非零值找出来,代入np.log2(a) * a * (-1)计算,然后将本列所有计算好的值求sum,即为该列对应的buyer的信息熵值。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月20日
  • 已采纳回答 1月12日
  • 创建了问题 1月5日