如何将R中的tidyverse翻译成Python中的pandas?

如何将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

我正在用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 = 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”上出现一个关键错误