熊猫groupby获得最大符号

时间:2020-10-09 12:20:08

标签: python pandas

我有这样的df:

import pandas as pd

df = pd.DataFrame(
    [
        ['chart.a', 'dim1', -10],
        ['chart.a', 'dim2', 5],
        ['chart.a', 'dim3', 9],
        ['chart.b', 'dimb1', -1],
        ['chart.b', 'dimb2', 2],
    ], columns=['chart', 'dim', 'z']
)

我想通过分组来获得最大值,而不考虑符号。像这样:

df.groupby('chart').agg({'z': ['max']})

返回哪个

          z
        max
chart      
chart.a   9
chart.b   2

但是我真正想要的是

          z
        max
chart      
chart.a -10
chart.b   2

例如对于chart.a,最大abs值为-10,则返回该值;对于chart.b,其abs值为2,则返回该值。

所以我想不考虑符号而仅根据abs值来进行分组,但是将符号保持在返回的最大值内。

1 个答案:

答案 0 :(得分:8)

使用此脚本而不是简单的agg

df.groupby('chart').agg({'z': lambda x: max(x, key=abs)})