ffill с groupby слишком медленно [дублировать]

Мы можем попробовать data.table. Преобразуйте «data.frame» в «data.table» (setDT(df1)), сгруппированные по «группе», мы получим cummax «var» и назначим (:=) его новой переменной («curMax ')

library(data.table)
setDT(df1)[, curMax := cummax(var), by = group]

Как прокомментировал @Michael Chirico, если данные не order отредактированы «временем», мы можем сделать это в «i»

setDT(df1)[order(time), curMax:=cummax(var), by = group]
< hr>

Или с помощью dplyr

library(dplyr)
df1 %>% 
    group_by(group) %>%
    mutate(curMax = cummax(var)) 
1
задан Alexander 26 April 2016 в 19:42
поделиться

3 ответа

Как насчет пересылки каждой группы?

 df = df.groupby(['id'], as_index=False).apply(lambda group: group.ffill())
1
ответ дан Alexander 28 August 2018 в 06:50
поделиться

Вероятно, эффективно выполнить fillna непосредственно на объекте groupby:

df = df.groupby(['id']).fillna(method='ffill')

Метод, на который ссылается здесь в документации.

0
ответ дан bbaker 28 August 2018 в 06:50
поделиться

github / jreback: это обман # 7895. .ffill не реализован в cython при операции groupby (хотя это, безусловно, может быть), и вместо этого называет пространство python для каждой группы. вот простой способ сделать это. url: https://github.com/pandas-dev/pandas/issues/11296

в соответствии с ответом jreback, когда вы делаете groupby ffill () не оптимизирован, но cumsum () есть. попробуйте следующее:

df = df.sort_values('id')
df.ffill() * (1 - df.isnull().astype(int)).groupby('id').cumsum().applymap(lambda x: None if x == 0 else 1)
1
ответ дан xmduhan 28 August 2018 в 06:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: