如何将R中的tidyverse翻译成Python中的pandas?
我正在用R和Python进行数据分析,以比较它们的差异。目前我正在努力翻译如何将R中的tidyverse翻译成Python中的pandas?,python,r,pandas,Python,R,Pandas,我正在用R和Python进行数据分析,以比较它们的差异。目前我正在努力翻译 data %>% mutate(pct_leader = ballotsLeader/validBallots) %>% group_by(community) %>% mutate(mean_pct_leader = mean(pct_leader), sd_pct_leader = sd(pct_leader), up_pct_leader = mea
data %>%
mutate(pct_leader = ballotsLeader/validBallots) %>%
group_by(community) %>%
mutate(mean_pct_leader = mean(pct_leader),
sd_pct_leader = sd(pct_leader),
up_pct_leader = mean_pct_leader+2*sd_pct_leader) %>%
filter(pct_leader > up_pct_leader) %>%
top_n(5, pct_leader)
变成Python
我已经尝试了以下python代码
grouped = data.assign(pct_leader = lambda x: x['ballotsLeader']/x['validBallots']).groupby('community').assign(mean_pct_leader = lambda x: mean(x['pct_leader']),
sd_pct_leader = lambda x: stdev(x['pct_leader']),
up_pct_leader = lambda x: x['mean_pct_leader']+2*x['sd_pct_leader']).query('pct_leader > up_pct_leader').pct_leader.nlargest(5)
但是得到一个AttributeError:'DataFrameGroupBy'对象没有属性'assign'
错误
我意识到这是因为DataFrameGroupBy对象没有assign方法
如何保持R代码的顺序,但将其转换为python
编辑:这是我正在处理的数据
| community | province | municipality | precinct | registeredVoters | emptyBallots | invalidBallots | validBallots | ballotsLeader |
|-----------|-----------|--------------|----------|------------------|--------------|----------------|--------------|---------------|
| GALICIA | Coruña, A | Ames | 001 B | 270 | 3 | 7 | 206 | 129 |
| GALICIA | Coruña, A | Ames | 004 A | 356 | 2 | 7 | 257 | 136 |
| GALICIA | Coruña, A | Ames | 002 C | 296 | 1 | 2 | 214 | 149 |
| GALICIA | Coruña, A | Ames | 010 U | 646 | 15 | 10 | 507 | 189 |
| GALICIA | Coruña, A | Ames | 012 B | 695 | 6 | 8 | 479 | 247 |
如果看不到一些数据,很难做到这一点,但这应该是可行的:
(data.assign(pct_leader=data['ballotsLeader'] / data['validBallots'])
.groupby('community').agg(
mean_pct_leader=('pct_leader', 'mean')
sd_pct_leader=('pct_leader', 'std'),
up_pct_leader=('pct_leader', lambda x: (x['pct_leader'].mean()+2) * x['pct_leader'].std())
)
.query('pct_leader > up_pct_leader')
.nlargest(5, 'pct_leader')
)
使用,您可以轻松地将R代码转换为python:
from datar.all导入f、mutate、group\u by、mean、sd、filter、slice\u max
数据>>\
变异(pct_leader=f.ballotsLeader/f.validBallots)>>\
小组成员(f.社区)>>\
变异(平均值=平均值),
sd\U pct\U引线=sd(f.pct\U引线),
向上\u pct\u leader=f.mean\u pct\u leader+2*f.sd\u pct\u leader)>>\
过滤器(f.pct\U引线>f.up\U pct\U引线)>>\
切片最大值(f.pct\u引线,n=5)
#top_n()已被替换为slice_min()/slice_max()
我是这个包裹的作者。如果您有任何疑问,请随时提交问题。请共享一个示例数据集;此外,如错误所示,
groupby
没有分配属性。可能是agg
而不是assign,并传递参数和聚合函数的元组。这很有用,因为它还将filter
转换为。query
和top\n
转换为。我已经为问题添加了数据。此外,您提供的解决方案在“pct\U leader”上出现一个关键错误