代码之家  ›  专栏  ›  技术社区  ›  spitfiredd

熊猫:分组加权平均,如何控制输出列的名称?

  •  2
  • spitfiredd  · 技术社区  · 6 年前

    我正在使用一个自定义函数来计算加权平均值。

    就像,

    df.groupby(['group1', 'group2']).apply(weighted_average, 'val', 'wt')

    回归系列是这样的,

    group1                group2
    foo                   a              8.085493
                          b             45.610411
                          c            161.959249
                          d             85.923614
                          e             30.953251
    Abar                  a             24.000000
                          b             11.000000
                          c             18.723185
    

    但是,加权平均列没有名称。如何显式命名此列?

    我不想依赖这样一个事实:列被指定了名称 0 因为那可能会导致失败。

    2 回复  |  直到 6 年前
        1
  •  3
  •   harvpan    6 年前

    使用安装程序 @user3483203 的答案,你可以使用 reset_index() 具有 name .

    df = pd.DataFrame({'a': [1,1,2,2,3,3], 'b': [1,2,3,4,5,6], 'c': [1,4,3,2,1,6]})
    df.groupby(['a', 'b']).c.mean().reset_index(name='avg')
    

    输出:

       a    b   avg
    0   1   1   1
    1   1   2   4
    2   2   3   3
    3   2   4   2
    4   3   5   1
    5   3   6   6
    
        2
  •  2
  •   user3483203    6 年前

    使用 pd.Series.rename reset_index :

    df = pd.DataFrame({'a': [1,1,2,2,3,3], 'b': [1,2,3,4,5,6], 'c': [1,4,3,2,1,6]})
    df.groupby(['a', 'b']).c.mean()
    
    a  b
    1  1    1
       2    4
    2  3    3
       4    2
    3  5    1
       6    6
    

    使用 rename

    df.groupby(['a', 'b']).c.mean().rename('hello').reset_index()
    
       a  b  hello
    0  1  1      1
    1  1  2      4
    2  2  3      3
    3  2  4      2
    4  3  5      1
    5  3  6      6