Python Pandas组中的最大值为新列

Vic*_*cki 8 python grouping dataframe pandas pandas-groupby

我正在尝试计算一个新列,其中包含多个组中每个组的最大值.我来自Stata背景,所以我知道Stata代码会是这样的:

by group, sort: egen max = max(odds) 
Run Code Online (Sandbox Code Playgroud)

例如:

data = {'group' : ['A', 'A', 'B','B'],
    'odds' : [85, 75, 60, 65]}
Run Code Online (Sandbox Code Playgroud)

然后我希望它看起来像:

    group    odds    max
     A        85      85
     A        75      85
     B        60      65
     B        65      65
Run Code Online (Sandbox Code Playgroud)

最后,我想形成列需要1/(max-min) * odds地方maxmin是为每个组.

jpp*_*jpp 26

使用groupby+ transform

df['max'] = df.groupby('group')['odds'].transform('max')
Run Code Online (Sandbox Code Playgroud)

这相当于冗长:

maxima = df.groupby('group')['odds'].max()
df['max'] = df['group'].map(maxima)
Run Code Online (Sandbox Code Playgroud)

transform方法将groupby结果与groupby索引器对齐,因此不需要显式映射。


小智 0

df['max'] = df.group_col.map(lambda x: df.groupby('group_col').odds.max()[x])
Run Code Online (Sandbox Code Playgroud)

  • 如果您能解释一下您的答案,那就更好了。只有代码在 SO 上是不可接受的。 (2认同)
  • 对于大型数据帧,@jpp 的答案要快得多 (2认同)