是否有一个类似于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)
所以我的问题是我如何使用pandas在Python中完成它。我试过跟随,但它不起作用
x['max_pop'] = x.groupby('country').pop.apply(max)
答案 0 :(得分:5)
您想使用transform
。 transform
将返回一个与所分组内容具有相同索引的对象,这样可以很容易地将该对象作为新列分配回来,如果它是一个数据帧。
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]
))
答案 1 :(得分:0)
我一直在从 Python 中的 R 移植数据包(dplyr、tidyr、tibble 等):
https://github.com/pwwang/datar
如果您熟悉 R 中的那些包,并想将其应用到 Python 中,那么它就在这里为您提供:
>>> from datar.all import (
... c, f, tibble, rep, letters, sample, group_by, mutate, arrange, max
... )
>>>
>>> x = tibble(
... country=rep(c("US", "UK"), 5),
... state=c(letters[:10]),
... pop=sample(f[10000:50000], 10)
... )
>>>
>>> x >> group_by(f.country) >> mutate(max_pop=max(f.pop)) >> arrange(f.country)
country state pop max_pop
<object> <object> <int64> <int64>
0 UK b 48496 49290
1 UK d 49290 49290
2 UK f 46748 49290
3 UK h 43078 49290
4 UK j 20552 49290
5 US a 29046 45070
6 US c 22936 45070
7 US e 44238 45070
8 US g 12995 45070
9 US i 45070 45070
[Groups: country (n=2)]