1

data_1 から data_3 データフレームに到達するスマートで簡潔な方法が必要です。今、私はデータフレーム2に簡単にたどり着きました.

DATA_1                        
key  SEGM1    SEGM2      VAL
A        K        X        1
B        K        X        2
C        K        X        3
D        K        Y        4
E        K        Y        5
F        J        Y        6
G        J        Z        7
H        J        Z        8
I        J        Z        9


DATA_2
SEGM1   SEGM2       VAL
    K       X         6
            Y         9
    J       Y         6
            Z        24

DATA_3
SEGM1   SEGM2        VAL
    K       X        40%
            Y        60%
    J       Y        20%
            Z        80%

どうもありがとう!

M

4

1 に答える 1

1

これがワンライナーです:

In [1]: df
Out[1]:
    SEGM1 SEGM2  VAL
key
A       K     X    1
B       K     X    2
C       K     X    3
D       K     Y    4
E       K     Y    5
F       J     Y    6
G       J     Z    7
H       J     Z    8
I       J     Z    9

この関数を使用して、DataFrame.div2つのデータフレームを分割します。最初のデータフレームは、シェアを計算してから合計する「内部レベル」ごとにグループ化されます。2番目のデータフレームは、シェア計算の分母として機能する「外部レベル」によってグループ化されます。マルチインデックスレベルSEGM1を参照する関数level=0に渡す必要があります。div

In [2]: df.groupby(['SEGM1','SEGM2'])[['VAL']].sum().div(df.groupby('SEGM1').sum(),level=0)
Out[2]:
             VAL
SEGM1 SEGM2
J     Y      0.2
      Z      0.8
K     X      0.4
      Y      0.6

分子データフレーム:

In [1]: df.groupby(['SEGM1','SEGM2'])[['VAL']].sum()
Out[1]:
             VAL
SEGM1 SEGM2
J     Y        6
      Z       24
K     X        6
      Y        9

分母DataFrame:

In [2]: df.groupby('SEGM1').sum()
Out[2]:
       VAL
SEGM1
J       30
K       15
于 2013-01-21T19:58:35.647 に答える