Dataframe 熊猫从数据帧获取共享

Dataframe 熊猫从数据帧获取共享,dataframe,grouping,pandas,Dataframe,Grouping,Pandas,我需要一种智能而简洁的方式从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

我需要一种智能而简洁的方式从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%
非常感谢

这是一条单行线:

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=0
传递给
div
函数,该函数引用多索引级别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
分母数据帧:

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
这是一条单行线:

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=0
传递给
div
函数,该函数引用多索引级别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
分母数据帧:

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