2013-01-21 50 views
1

我需要一個聰明而簡潔的方式從data_1到達data_3數據框。 現在我米輕鬆抵達只是數據幀2.大熊貓從DataFrame獲取份額

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% 

非常感謝!

中號

回答

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功能分隔兩個dataframes。第一個數據框按您想要計算份額然後求和的「內層」進行分組。第二個數據框按照用作分攤計算分母的「外層」進行分組。您必須將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 
+0

非常感謝!中號 –