簡體   English   中英

使用 Pandas 求解多個線性方程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM