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'
任何人都可以帮助我吗?
答案 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)))