代码之家  ›  专栏  ›  技术社区  ›  ah bon

用Pandas重命名groupby和计数结果的列名

  •  1
  • ah bon  · 技术社区  · 5 年前

    给定以下数据帧:

    import numpy as np
    df = pd.DataFrame({'price': np.random.random_integers(0, high=100, size=100)})
    ranges = [0,10,20,30,40,50,60,70,80,90,100]
    df.groupby(pd.cut(df.price, ranges)).count()
    

    外出:

              price
     price  
    (0, 10]     9
    (10, 20]    11
    (20, 30]    11
    (30, 40]    9
    (40, 50]    16
    (50, 60]    7
    (60, 70]    10
    (70, 80]    9
    (80, 90]    14
    (90, 100]   4
    

    我怎么能 reset_index 将结果和列名重命名为 bins counts ?谢谢。

          bins    counts
    0   (0, 10]     9
    1   (10, 20]    11
    2   (20, 30]    11
    3   (30, 40]    9
    4   (40, 50]    16
    5   (50, 60]    7
    6   (60, 70]    10
    7   (70, 80]    9
    8   (80, 90]    14
    9   (90, 100]   4
    
    2 回复  |  直到 5 年前
        1
  •  4
  •   ah bon    5 年前

    这段代码可以工作,但不够简洁,如果你有其他选择,欢迎分享:

    df.groupby(pd.cut(df.price, ranges)).count()\
    .rename(columns={'price' : 'counts'})\
    .reset_index()\
    .rename(columns={'price': 'bins'})
    

    外出:

          bins    counts
    0   (0, 10]     9
    1   (10, 20]    11
    2   (20, 30]    11
    3   (30, 40]    9
    4   (40, 50]    16
    5   (50, 60]    7
    6   (60, 70]    10
    7   (70, 80]    9
    8   (80, 90]    14
    9   (90, 100]   4
    
        2
  •  3
  •   jezrael    5 年前

    一个想法是使用 rename 系列从 pd.cut ,所以如果选择列 price 对于处理组,输出为 Series ,所以添加 Series.reset_index 具有 name 参数 2 columns DataFrame :

    df1 = (df.groupby(pd.cut(df.price, ranges).rename('bins'))['price'].count()
             .reset_index(name='counts'))
    print (df1)
            bins  counts
    0    (0, 10]      13
    1   (10, 20]      13
    2   (20, 30]       9
    3   (30, 40]       9
    4   (40, 50]       7
    5   (50, 60]       9
    6   (60, 70]       9
    7   (70, 80]      12
    8   (80, 90]       9
    9  (90, 100]       9
    
        3
  •  0
  •   xVlady    2 年前
       df.groupby('team', as_index=False).agg(my_sum=('points', sum),my_max=('points', max))
    

    https://www.statology.org/pandas-groupby-rename-column/