2016-12-14 136 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] 
))