2016-12-14 134 views
4

是否有類似於mutate(dplyr)的函數,使用它我可以通過在分組數據的某一列上應用函數來在分組數據上添加新列?下面是這個問題的詳細解釋:替代python熊貓中的mutate(dplyr包)

我有一個用下面的代碼

x<- data.frame(country = rep(c("US", "UK"), 5), state = c(letters[1:10]), pop=sample(10000:50000,10)) 

現在,我想補充這對於美國和英國最大的人口新列生成的樣本數據。我可以在R中使用以下功能:

x<- group_by(x, country) 
x<- mutate(x,max_pop = max(pop)) 
x<- arrange(x, country) 

所以我的問題是如何在Python中使用熊貓來做到這一點。我試過但不起作用

x['max_pop'] = x.groupby('country').pop.apply(max) 
+0

沒有管道? dplyr的簽名方法之一:'x%>%group_by(country)%>%mutate(max_pop = max(pop))%>%arrange(country)'...某處R程序員在哭泣! – Parfait

+1

是的,但我感覺更舒服,沒有管道運營商 –

+0

我明白。你會及時的。起初,我討厭R的申請家庭。只留下我的'for'和'while'循環。他們很難理解或寫作。現在我喜歡lapply,mapply,vapply,sapply -methods Python的熊貓缺乏(沒有自定義解決方法)。 – Parfait

回答

2

要使用transformtransform將返回一個與分組內容相同索引的對象,如果它是一個數據框,則可以輕鬆地將該對象分配爲該對象中的新列。

x['max_pop'] = x.groupby('country').pop.transform('max') 

設置

import pandas as pd 

x = pd.DataFrame(dict(
    country=['US','UK','US','UK'], 
    state=['a','b','c','d'], 
    pop=[37088, 46987, 17116, 20484] 
))