python - Python 中的 Excel AVERAGEIF 使用替代表格布局
问题描述
我有以下列表:
属性列在第一行,虚拟变量检查某种糖果类型是否符合此标准。最后一列显示每行某糖果类型的“成功值”
我想创建一个条形图,描述每个属性的平均 winpercent 值(即巧克力、果味......)。在 Excel 中,我将创建另一个表作为基础,每个属性位于顶部,平均值位于其下方(使用 AVERAGEIF 公式)。但是,我不确定如何使用 Python 来实现这一点。有人可以帮忙吗?
解决方案
如果没有 AVERAGEIF,您可以对产品attributeIsUsed * winpercent
求和,并对attributeIsUsed
值求和,平均值是两者的比率。
attributeIsUsed
,我的意思是0
或1
如果该属性用于该糖果中,则在单元格中。
excel中的代码
如果C
是 列caramel
和L
列winpercent
,您可以在单元格 C14 到 C16 中添加这些公式,平均值将在 C16 中:
C14 = SUMPRODUCT(C2:C13, L2:L13)
C15 = SUM(C2:C13)
C16 = C14 / C15
python中的代码
>>> d = [
... ['chocolate', 'caramel', 'bar', 'winpercent'],
... [1, 1, 0, 66.97],
... [1, 0, 1, 67.60],
... [0, 0, 0, 32.26],
... [1, 0, 1, 50.34],
... [1, 1, 1, 56.91]]
>>> averages = [sum(d[row][col] * d[row][-1] for row in range(1,len(d)))/sum(d[row][col] for row in range(1,len(d))) for col in range(len(d[0])-1)]
>>> averages
[60.455, 61.94, 58.28333333333333]
例子
焦糖的平均值是:
(1 * 66.97 + 1* 56.91) / (1 + 1)
. 您不需要条件语句来获得该公式,因为将零添加到总和是可以的!焦糖的平均值是:
(1 * 66.97 + 0 * 67.60 + 0 * 32.26 + 0 * 50.34 + 1* 56.91) / (1 + 0 + 0 + 0 + 1)
分子是:
sum(d[row][col] * d[row][-1] for row in range(1,len(d)))
这里d[row][col]
是 0 或 1,d[row][-1]
是对应的 winpercent。
分母是:
sum(d[row][col] for row in range(1,len(d)))
这只是零和一的总和。
如果您使用的是 pandas 或类似的东西,您当然可以通过替换 和 来使这段for col in range(len(d[0])-1)
代码for col in ['chocolate', 'caramel', 'bar']
更具[-1]
可读性['winpercent']
。
推荐阅读
- selenium - 我如何调用 captureScreenshot 方法来报告错误?
- dependency-injection - 依赖注入、组合根和入口点
- python - 为什么我的代码在计算相关性时会产生值错误?
- google-cloud-platform - 如何使用 Terraform 在 GCP 中添加 DNS 记录?
- python - 无法在路径上找到 Ghostscript
- javascript - 为什么 document.getElementById().style.transform="translateX()" 的“转换”只会翻译一次?
- excel - 在 Excel 中通过 XMLFilter 过滤 XML,但 XPath 错误
- javascript - Google Analytics(分析)“链接器”能否在使用 analytics.js 的网站和使用 gtag.js 的网站之间工作?
- node.js - 需要为 NPM 包导出类
- c# - ASP.NET Core 中的手动内容协商