Python Pandas组中的最大值为新列

时间:2016-02-25 23:16:18

标签: python pandas max grouping pandas-groupby

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

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

最终,我正在尝试形成一个列max,其中min@location为每个组。

3 个答案:

答案 0 :(得分:2)

使用groupby + transform

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

这相当于冗长的内容:

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

df['max'] = df.group_col.map(lambda x: df.groupby('group_col').odds.max()[x])