我有一个这样的 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 值,但将符号保持在我返回的最大值中。
使用此脚本而不是简单的 agg
df.groupby('chart').agg({'z': lambda x: max(x, key=abs)})
Run Code Online (Sandbox Code Playgroud)