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

熊猫groupby:当前组的坐标

  •  -1
  • yurnero  · 技术社区  · 4 年前

    假设我有一个数据框

    import pandas as pd
    df = pd.DataFrame({'group':['A','A','B','B','C','C'],'score':[1,2,3,4,5,6]})
    

    首先,我想计算各组的分数之和。我通常是这样的

    def group_func(x):
        d = {}
        d['sum_scores'] = x['score'].sum()
        return pd.Series(d)
    df.groupby('group').apply(group_func).reset_index()
    

    现在假设我要修改 group_func 但这种修改要求我知道当前输入的组标识 x .我试过了 x['group'] x[group].iloc[0] 在函数的定义范围内,两者都不起作用。

    有什么方法可以实现这个功能吗 group_func(x) 了解当前输入的定义坐标 十、 ?

    在这个玩具示例中,比方说,我只想得到:

    pd.DataFrame({'group':['A','B','C'],'sum_scores':[3,7,11],'name_of_group':['A','B','C']})
    

    很明显,最后一列只是重复第一列。我想知道如何使用 group\u func(x) .如:as group\u func 处理 十、 对应于组“A”,并生成值3 sum_scores ,如何在的本地范围内提取当前标识“A” group\u func ?

    1 回复  |  直到 4 年前
        1
  •  1
  •   BENY    4 年前

    只需添加 .name

    def group_func(x):
            d = {}
            d['sum_scores'] = x['score'].sum()
            d['group_name'] = x.name # d['group_name'] = x['group'].iloc[0] 
            return pd.Series(d)
        
    df.groupby('group').apply(group_func)
    Out[63]: 
           sum_scores group_name
    group                       
    A               3          A
    B               7          B
    C              11          C
    

    您的代码修复请参见关于添加标记行 ''