我有这样的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值来进行分组,但是将符号保持在返回的最大值内。
答案 0 :(得分:8)
使用此脚本而不是简单的agg
df.groupby('chart').agg({'z': lambda x: max(x, key=abs)})