Преобразование кода R в код Python - PullRequest
0 голосов
/ 26 мая 2018

рабочий код в R

library(dplyr)
tmp <- test %>% 
       group_by(InvoiceDocNumber) %>% 
       summarise(invoiceprob=max(itemprob)) %>% 
       mutate(invoicerank=rank(desc(invoiceprob)))

Но я хочу переписать код на python.Я написал код ниже, но он выдает ошибку.Я использую аналогичную версию dplyr, которая доступна в python.

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'

Может кто-нибудь мне помочь?

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Вы можете использовать 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)})
0 голосов
/ 26 мая 2018

Я получил ответ

ddd = test.groupby('InvoiceDocNumber', as_index=False).agg({"itemprob": "max"})
ddd= ddd.rename(columns={'itemprob': 'invoiceprob'})
ddd['invoicerank'] =ddd['invoiceprob'].rank(ascending=0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...