[英]Solving multiple linear equations using Pandas
我認為這里有一個非常有趣的問題,但不知道如何通過計算來解決它,或者 Python 數據框是否適合於此目的。 我有這樣的數據:
SuperGroup Group Code Weight Income
8 E1 E012 a 0.5 1000
9 E1 E012 b 0.2 1000
10 E1 E013 b 0.2 1000
11 E1 E013 c 0.3 1000
實際上,“代碼”與“重量”具有一對一的關系。
“SuperGroup”與“Income”是一對一的關系。
一個 SuperGroup 由很多 Group 組成,一個 Group 有很多 Code。
我試圖根據該組內代碼的組合權重分配收入,因此對於 E012,這是(0.5*0.2 = 0.1)
,對於 E013,這是(0.2*0.3 = 0.06)
作為其總數的一部分,E012s 變為0.625 (0.1/(0.1+0.06)
和 E013s 變為 0.375 (0.06/(0.1+0.06)
。
數據框可以折疊並重寫為:
SuperGroup Group Code CombinedWeight Income
8 E1 E012 a,b 0.625 1000
10 E1 E013 b,c 0.375 1000
我能夠生成上述數據框,但我的下一步是將權重應用於收入以使其平均為 1000 的方式分配它,但反映了與之相關的組的權重大小。
讓x=0.625 and y=0.375 then x=1.67y
另外, (x+y)/2 = 1000
注意:我的數據通常在一個超群中有幾個群,所以如果我的理解是正確的,它可能會超過 2 個,從而產生一個線性方程組
求解同時產生 1250 和 750 作為加權收入。 數據幀可以重寫為:
SuperGroup Group Code Income
8 E1 E012 a,b 1250
10 E1 E013 b,c 750
這實際上是我需要它的方式。 任何指導都受到熱烈贊賞。
首先,我們agg
對數據幀['SuperGroup', 'Group']
res = (df.groupby(['SuperGroup', 'Group'])
.agg({'Weight': lambda x: x.cumprod().iloc[-1],
'Code': ','.join,
'Income': 'first'}))
然后我們在transform
的幫助下重新調整每個 SuperGroup 內的 Income:
s = res.groupby(level='SuperGroup')
res['Income'] = s.Income.transform('sum')*res.Weight/s.Weight.transform('sum')
Weight Code Income
SuperGroup Group
E1 E012 0.10 a,b 1250.0
E013 0.06 b,c 750.0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.