替代python pandas中的mutate(dplyr包)

sau*_*har 4 python r pandas dplyr mutate

是否存在类似于R的Python pandas函数dplyr::mutate(),该函数可以通过在分组数据的列之一上应用函数来向分组数据添加新列?下面是对该问题的详细说明:

我使用以下代码生成了示例数据:

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

现在,我想添加一个新列,该列具有美国和英国的最大人口。我可以使用以下R代码来做到这一点...

x <- group_by(x, country)
x <- mutate(x,max_pop = max(pop))
x <- arrange(x, country)
Run Code Online (Sandbox Code Playgroud)

...或等效地,使用R dplyr管道运算符:

x %>% group_by(country) %>% mutate(max_pop = max(pop)) %>% arrange(country)
Run Code Online (Sandbox Code Playgroud)

所以我的问题是我如何在Python中使用熊猫做到这一点?我尝试了以下操作,但没有成功

x['max_pop'] = x.groupby('country').pop.apply(max)
Run Code Online (Sandbox Code Playgroud)

piR*_*red 5

您要使用transformtransform将返回一个与正在分组的对象具有相同索引的对象,如果它是一个数据帧,则可以轻松地将其分配回该对象中的新列。

x['max_pop'] = x.groupby('country').pop.transform('max')
Run Code Online (Sandbox Code Playgroud)

设定

import pandas as pd 

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