将R代码转换为python代码

时间:2018-05-26 00:18:17

标签: python r pandas dplyr dfply

R

中的工作代码
library(dplyr)
tmp <- test %>% 
       group_by(InvoiceDocNumber) %>% 
       summarise(invoiceprob=max(itemprob)) %>% 
       mutate(invoicerank=rank(desc(invoiceprob)))

但是我想在python中重写代码。我写了下面的代码,但它给我的错误。我正在使用python中提供的类似版本的dplyr。

from dfply import *
tmp = (test >>
       group_by(test.InvoiceDocNumber) >> 
       summarize(invoiceprob=max(test.itemprob)) >>
       mutate(invoicerank=rankdata(test.invoiceprob)))

AttributeError: 'DataFrame' object has no attribute 'invoiceprob'

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:2)

您可以使用assign将其全部集中在一个链中:

(
test.groupby("InvoiceDocNumber", as_index=False)
 .itemprob.max()
 .rename(columns={"itemprob":"invoiceprob"})
 .assign(invoicerank = lambda x: x.invoiceprob.rank(ascending=False))
)

输出:

   InvoiceDocNumber  invoiceprob  invoicerank
0                 0     0.924193          5.0
1                 1     0.974173          4.0
2                 2     0.978962          3.0
3                 3     0.992663          2.0
4                 4     0.994243          1.0

数据:

import numpy as np
import pandas as pd
n = 100
test = pd.DataFrame({"InvoiceDocNumber": np.random.choice(np.arange(5), size=n),
                     "itemprob": np.random.uniform(size=n)})

答案 1 :(得分:0)

我得到了答案

ap

答案 2 :(得分:0)

您想使用:datar(我是作者)

from datar.all import *

tmp = test >> \
      group_by(f.InvoiceDocNumber) >> \
      summarise(invoiceprob=max(f.itemprob)) >> \
      mutate(invoicerank=rank(desc(f.invoiceprob)))