Python 熊猫群比获得最大值,不考虑符号

Python 熊猫群比获得最大值,不考虑符号,python,pandas,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

我有这样一个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']})
我想通过分组来获得最大值,而不考虑符号。比如说:

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
e、 g.对于图表a,最大abs值为-10,因此返回该值;对于图表b,最大abs值为2,因此返回该值


因此,我想不考虑符号,只根据abs值来执行groupby,但将符号保留在我返回的最大值中。

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

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

或者,您可以只创建一个abs版本的z列和groupby,使用正常的最大值。可能比使用lambda更快。我很高兴您找到了解决问题的方法。但是,不应将实际答案/解决方案编辑到您的问题中。一般来说,你应该通过提问来澄清问题,但不要在问题中包含答案。您应该使用用于解决问题的代码/解决方案创建自己的答案,然后接受它。系统可能需要48小时的延迟才能执行此操作。当你自己解决了这个问题,明白了,谢谢。最终接受了比我自己的解决方案更好的解决方案: