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%

非常感谢!

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.div函数划分两个数据帧。第一个数据框按您要计算份额的“内部级别”分组,然后求和。第二个数据帧按“外层”分组,作为份额计算的分母。您必须传递level=0div引用多索引级别 SEGM1 的函数。

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

分母数据框:

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