22

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

by group, sort: egen max = max(odds) 

例如:

data = {'group' : ['A', 'A', 'B','B'],
    'odds' : [85, 75, 60, 65]}

然后我希望它看起来像:

    group    odds    max
     A        85      85
     A        75      85
     B        60      65
     B        65      65

最终,我试图形成一个列,记录每个组的1/(max-min) * odds位置maxmin位置。

4

3 回答 3

29

使用groupby+ transform

df['max'] = df.groupby('group')['odds'].transform('max')

这相当于详细:

maxima = df.groupby('group')['odds'].max()
df['max'] = df['group'].map(maxima)

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

于 2019-01-09T19:47:15.680 回答
3

使用上述 jpp 的方法有效,但它也给出了“SettingWithCopyWarning”。虽然这可能不是问题,但我相信下面的代码会删除该警告:

df = df.assign(max = df.groupby('group')['odds'].transform('max')).values
于 2020-01-10T19:16:17.703 回答
0
df['max'] = df.group_col.map(lambda x: df.groupby('group_col').odds.max()[x])
于 2017-05-12T04:38:06.013 回答