Python 熊猫群比获得最大值,不考虑符号
我有这样一个df: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
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小时的延迟才能执行此操作。当你自己解决了这个问题,明白了,谢谢。最终接受了比我自己的解决方案更好的解决方案: