【问题标题】:Fill in rows to get the same amount in each group after group by. Pandas填写行以在分组依据之后在每个组中获得相同的数量。熊猫
【发布时间】:2017-07-23 16:47:06
【问题描述】:

我的目标是让每个组的行数相同。原来group by之后会得到这样的东西:

        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

【问题讨论】:

    标签: python pandas bigdata


    【解决方案1】:

    我认为你可以使用reindex by 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)
    

    【讨论】:

      猜你喜欢
      • 2021-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-18
      • 2018-10-29
      • 2018-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多