Python Pandas在一个组中的最大值作为一个新列
问题描述:
我正在尝试计算一个包含每个组的最大值的新列。我从Stata的背景的,所以我知道塔塔代码将是这样的:Python Pandas在一个组中的最大值作为一个新列
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
的列,其中max
和min
是针对每个组的。
答
df['max'] = df.group_col.map(lambda x: df.groupby('group_col').odds.max()[x])
+0
如果你可以解释一下你的答案。 SO上只有代码是不可接受的。 –
+0
lambda函数在group_col上执行groupby,并返回每个组中赔率列的最大值。这些返回值的索引是它们所属组的名称。因此,对于group_col中的每个元素,我们通过执行(lambda x(组名))来映射适当的最大值:groupby_returns_max_values [x])。 – toniitony
为什么B组不是最大'65'? – EdChum
无论如何,如果你追求的是你所描述的那么'df ['max'] = df.groupby('group')['odds']。transform('max')'将起作用 – EdChum