我需要一种智能且简洁的方法从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%
非常感谢!
中号
答案 0 :(得分: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=0
传递给引用多索引级别SEGM1的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
Numerator DataFrame:
In [1]: df.groupby(['SEGM1','SEGM2'])[['VAL']].sum()
Out[1]:
VAL
SEGM1 SEGM2
J Y 6
Z 24
K X 6
Y 9
Denominator DataFrame:
In [2]: df.groupby('SEGM1').sum()
Out[2]:
VAL
SEGM1
J 30
K 15