无论符号如何,Pandas groupby 都会获得最大值

and*_*894 0 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']
)
Run Code Online (Sandbox Code Playgroud)

无论符号如何,我都想做一个分组以获得最大值。所以像这样:

df.groupby('chart').agg({'z': ['max']})
Run Code Online (Sandbox Code Playgroud)

哪个返回

          z
        max
chart      
chart.a   9
chart.b   2
Run Code Online (Sandbox Code Playgroud)

但我真正想要的是

          z
        max
chart      
chart.a -10
chart.b   2
Run Code Online (Sandbox Code Playgroud)

例如,chart.a对于最大的 abs 值是 -10 所以返回那个,因为chart.b它是 2 所以返回那个。

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

MhD*_*DG7 8

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

df.groupby('chart').agg({'z': lambda x: max(x, key=abs)})
Run Code Online (Sandbox Code Playgroud)