2016-02-25 29 views
4

我正在嘗試計算一個包含每個組的最大值的新列。我從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的列,其中maxmin是針對每個組的。

+2

爲什麼B組不是最大'65'? – EdChum

+1

無論如何,如果你追求的是你所描述的那麼'df ['max'] = df.groupby('group')['odds']。transform('max')'將起作用 – EdChum

回答

1
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

相關問題