2017-03-03 4 views
-3

私の目標は、グループごとにグループごとに同じ数の行を取得することです。もともと、グループの後に次のようなものがあります:行を入力してグループ化した後、各グループで同じ金額を取得します。 Pandas

 count mean std  min 25%  50%  75% max 
X Y       
56 2 5  25200 21  0.0 20000.0 20000.0 26000.0 60000.0 
    8 1.0  20000 NaN  20000 20000 20000 20000 20000.0 
952 2 25.0 216132 239321 0  35000 93100 55000 650000.0 
233 2 1.0  0  NaN  0  0.0  0.0  0.0  0.0 
335 2 9.0  853  60018 0.0  35000 98000 130000 150000.0 
    6 11.0 3409 4943 0.0  0.0 0.0  7750.0 11000.0 

私の目標を達成するためには、次のようにしてください。

 count mean std  min 25%  50%  75% max 
X Y       
56 1 0  0  NaN  NaN NaN  NaN  NaN NaN  
    2 5  252 21  0.0 20000.0 20000.0 26000.0 60000.0 
    3 0  0  NaN  NaN NaN  NaN  NaN NaN 
    4 0  0  NaN  NaN NaN  NaN  NaN NaN 
    5 0  0  NaN  NaN NaN  NaN  NaN NaN 
    6 0  0  NaN  NaN NaN  NaN  NaN NaN 
    7 0  0  NaN  NaN NaN  NaN  NaN NaN 
    8 1.0  20000 NaN  20000 200 20000 20000 20000.0 
952 1 0  0  NaN  NaN NaN  NaN  NaN NaN 
    2 25.0 216132 239 0  35000 93100 55000 650000.0 
    3 0  0  NaN  NaN NaN  NaN  NaN NaN 
    4 0  0  NaN  NaN NaN  NaN  NaN NaN 
    5 0  0  NaN  NaN NaN  NaN  NaN NaN 
    6 0  0  NaN  NaN NaN  NaN  NaN NaN 
    7 0  0  NaN  NaN NaN  NaN  NaN NaN 
    8 1.0  0  NaN  0  0   0  0  0 

答えて

0

は、私はあなたが使用することができると思うreindexMultiIndex.from_productによって:

#if need in second level only all unique values from all second levels 
mux = pd.MultiIndex.from_product([df.index.get_level_values('X').unique(), 
            df.index.get_level_values('Y').unique()]) 

#if need range from 1 to 8 (1,2,3,..8) 
mux = pd.MultiIndex.from_product([df.index.get_level_values('X').unique(), 
            np.arange(1,9)]) 

#if need range starts with min and end max value of all levels 
idx = df.index.get_level_values('Y') 
mux = pd.MultiIndex.from_product([df.index.get_level_values('X').unique(), 
            np.arange(idx.min(),idx.max())]) 


df = df.reindex(mux) 
print (df) 
関連する問題