我正在尝试计算一个新列,其中包含多个组中每个组的最大值。我来自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
为每个组。
答案 0 :(得分:2)
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])