python - 是否有一种算法可以使用不同的数据约束进行平均?
问题描述
月 | 产品 | 产品 | 产品 | 当前的 |
---|---|---|---|---|
1 | 是的 | 一个 | 17 | |
2 | 是的 | 一个 | 22 | |
3 | 是的 | 一个 | 21 | |
4 | 是的 | 小号 | 问 | 44 |
5 | 是的 | 小号 | 问 | 32 |
6 | 是的 | 小号 | 问 | 23 |
7 | 是的 | 小号 | 乙 | 56 |
8 | 是的 | 小号 | 乙 | 73 |
9 | 是的 | 小号 | 乙 | 12 |
10 | 是的 | C | 26 | |
11 | 是的 | C | 45 | |
12 | 是的 | C | 37 |
如上表所示,我有一些数据,其中的元素构成不同产品的一部分。例如,上表中的第 4 个元素(突出显示的行)即44
是 product 的一部分Q
,S
并且Y
。每个产品的平均值如下:
average of Product A=(17+22+21)/3=20
average of Product Q=(44+32+23)/3=33
average of Product S=(44+32+23+56+73+12)/6=40
average of Product Y=(17+22+21+44+32+23+56+73+12+26+45+37)/12=34
现在我想操纵数据,使新的平均值为:
Average of product A= 25
Average of product Q = 35
Average of Product S= 32
Average of product Y= 39
应保持产品内的月份和形状。
所以结果应该是(示例计算):
new Month 1= (new average - current average) +current month 1 value
new Month 1= (25 - 20) + 17 = 22
new Month 2= (new average - current average) +current month 2 value
new month 2 = (25 - 20 ) + 22 = 27
new Month 3= (new average - current average) +current month 3 value
new months 3 =(25-20)+ 21= 26
月形差异示例
月 | 第 1 个月 | 第 2 个月 | 第 3 个月 |
---|---|---|---|
当前的 | 17 | 22 | 21 |
当前月差 | 22-17= 5 | 21-22= -1 | |
新的 | 22 | 27 | 26 |
新月差 | 27-22= 5 | 26-27= -1 |
可以看出,month 2 - month1
对于当前数据和新数据5
,当前数据和新数据month 3- month 2
都-1
适用。因此,产品的每月形状A
得以保持。
月 | 产品 | 产品 | 产品 | 新的 |
---|---|---|---|---|
1 | 是的 | 一个 | 22 | |
2 | 是的 | 一个 | 27 | |
3 | 是的 | 一个 | 26 | |
4 | 是的 | 小号 | 问 | 46 |
5 | 是的 | 小号 | 问 | 34 |
6 | 是的 | 小号 | 问 | 25 |
7 | 是的 | 小号 | 乙 | 38 |
8 | 是的 | 小号 | 乙 | 55 |
9 | 是的 | 小号 | 乙 | -6 |
10 | 是的 | C | 57 | |
11 | 是的 | C | 76 | |
12 | 是的 | C | 68 |
目前我有一个 VBA 代码循环遍历每个元素多次以计算当前平均值和新平均值之间的差异并将此差异应用于元素。有没有我可以使用的矩阵算法来进行相同的计算而不是使用迭代循环?算法代码将在 Matlab、C++ 或 Python 或 VBA 中实现。目前我一直在探索 MATLAB 函数lsqlin
,但无法让它做我想做的事。
能否请你帮忙?
解决方案
方法 :
- 忽略单个月份值,将其视为总和(与其形状有关)。[ mth1-mth12 >> 广告 ]
- 写下所有需要的关系。[ avg_X <--> a,b,c,d ]
- 使用关系和新的已知值,求解总和 [ a,b,c,d ]
执行 :
第 1 步:第 1-4 行 | 第二步:5-8行
定义:
价值与关系 | “当前”案例 | “新”案例 |
---|---|---|
a = sum(mth1,mth2,mth3) | 60 | ? |
b = sum(mth4,mth5,mth6) | 99 | ? |
c = sum(mth7,mth8,mth9) | 141 | ? |
d = sum(mth10,mth11,mth12) | 108 | ? |
avg_A = a/3 | 20 | 25 |
avg_Q = b/3 | 33 | 35 |
avg_S = (b+c)/6 | 40 | 32 |
avg_Y = (a+b+c+d)/12 | 34 | 39 |
在“当前”情况下:上面的所有变量都有定义的值。
在“新”情况下(步骤 3):
avg_A = a/3 = 25 >> a = 25*3 = 75
avg_Q = b/3 = 35 >> b = 35*3 = 105
avg_S = (b+c)/6 = ((105)+c)/6 = 32 >> c = 32*6-105 = 87
avg_Y = (a+b+c+d)/12 = ((75)+(105)+(87)+d)/12 = 39 >> d = 201
用可以产生上述 a,b,c,d 值的任何值填写 mth1-12。
完毕。
p/s:由于 OP 仅共享 1 个新“案例”,Step2 细节可能会有所不同。但是,至少对于这种“形状”,这是可行的。
我之前的评论实际上指向一个声明“因为(观察到的关系不是真正的线性,所以不能在原始表上建立矩阵”。不过,如果你能弄清楚如何解决/将 Step2 关系置于矩阵形式, step3 应该更容易/自动化。推荐阅读
- android-studio - Android Studio 和 Intelij Idea 中不可用的设备
- c# - 如何解决“Package Google Authenticator 1.2.1 已使用 .NETFramework 恢复”,但我不想升级到最新版本(C#)
- c# - 带有 EF Core 5.0 的 ASP Core 3.1 API
- python - 在 Python 3.8 中没有附加类的 TypedDict 的键入键、值
- amazon-web-services - AWS 过滤和导出日志
- python-3.x - 一对多关系sqlite3的问题
- c# - 我的网络应用程序从法语资源中获取翻译,我知道为什么
- scala - 如何使用 AsyncHttpClientCatsBackend 忽略 Scala 上的 SSL 认证?
- appgallery - 当我上传包时,一直出现错误:“上传失败”
- python - Django 无法加载带有静态文件的简单静态页面