在分组后,填写行以在每个组中获得相同的金额。熊猫

时间:2017-03-03 14:15:52

标签: python pandas bigdata

我的目标是按组获取每组的相同行数。最初,在小组之后会得到这样的东西:

        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

1 个答案:

答案 0 :(得分:0)

我认为您可以reindex使用MultiIndex.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)