用reset将R cumsum转换为Python

2024-04-29 16:54:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将这个R代码转换成Python。你知道吗

mutate(Mod_1minutos = (cumsum(coalesce(Minutos_Desde_Ult_Medida, 0)) + Minutos_Desde_Ult_Medida*0)%/%6) %>%

这段代码在dataframe中创建一个新列,当这个总和是6的倍数时,它将重置计数器。你知道吗

如何在Python中执行此操作?你知道吗

我要做的是:

df_6_minutos['Minutos_Desde_Ult_Medida'] = df_6_minutos['Minutos_Desde_Ult_Medida'].fillna(0)

但是我不知道当Mod 6等于0时,我能做些什么来创建一个累计和重置呢

任何帮助都将不胜感激!你知道吗

以下是这场争论的完整代码:

df_6_minutos = df %>%

  group_by(Identificador_Locomotiva) %>%
  arrange(Data_Hora_Local_Leitura) %>%

  mutate(Data_Hora_UTC = as.POSIXct(Data_Hora_UTC, format = "%Y-%m-%dT%H:%M:%S", tz='')) %>%
  mutate(DT_HR_LOC_PEGADA = as.POSIXct(DT_HR_LOC_PEGADA, format = "%Y-%m-%dT%H:%M:%S", tz='')) %>%
  mutate(DT_HR_LOC_DEIXADA = as.POSIXct(DT_HR_LOC_DEIXADA, format = "%Y-%m-%dT%H:%M:%S", tz='')) %>%
  mutate(Condicao_Carga_Vagao = ifelse(QTDE_VAG_CAR==0 & QTDE_VAG_VAZ>0,"Vazio",
                                       ifelse(QTDE_VAG_CAR>0 & QTDE_VAG_VAZ==0,"Cheio","CheioEVazio"))) %>%
  mutate(Minutos_Desde_Ult_Medida = as.numeric((Data_Hora_Local_Leitura - lag(Data_Hora_Local_Leitura,1))/60)) %>%
  mutate(Mod_1minutos = (cumsum(coalesce(Minutos_Desde_Ult_Medida, 0)) + Minutos_Desde_Ult_Medida*0)%/%6) %>%
  mutate(Medidas_Consec_No_Intervalo_1 = as.numeric(unlist(sapply(rle(Mod_1minutos)[['lengths']],seq)))) %>%
  mutate(Velocidade_Media_Medidas_Consec_No_Intervalo = ave(Medida_Velocidade/10, cumsum(Medidas_Consec_No_Intervalo_1==1), FUN = cummean)) %>%
  mutate(Velocidade_Minima_Medidas_Consec_No_Intervalo = ave(Medida_Velocidade/10, cumsum(Medidas_Consec_No_Intervalo_1==1), FUN = cummin)) %>%
  mutate(Velocidade_Maxima_Medidas_Consec_No_Intervalo = ave(Medida_Velocidade/10, cumsum(Medidas_Consec_No_Intervalo_1==1), FUN = cummax)) %>%
  mutate(Metros_Minimo_Medidas_Consec_No_Intervalo = ave((Medida_Hodometro - lag(Medida_Hodometro,1))*100, cumsum(Medidas_Consec_No_Intervalo_1==1), FUN = cummin)) %>%
  mutate(Max_Medidas_Consec_No_Intervalo_1 = ifelse(lead(Medidas_Consec_No_Intervalo_1,1) < Medidas_Consec_No_Intervalo_1 | Minutos_Desde_Ult_Medida==360,Medidas_Consec_No_Intervalo_1,NA))

df_6_minutos = data.frame(df_6_minutos)

我已经开始将其转换为Python,并执行以下操作:

from dfply import *

df_6_minutos >> group_by('Identificador_Locomotiva')
df_6_minutos >> arrange('Data_Hora_Local_Leitura')

df_6_minutos["Data_Hora_UTC"] = pd.to_datetime(df_6_minutos["Data_Hora_UTC"], format = "%Y-%m-%dT%H:%M:%S").dt.tz_localize(None)
df_6_minutos["DT_HR_LOC_PEGADA"] = pd.to_datetime(df_6_minutos["DT_HR_LOC_PEGADA"], format = "%Y-%m-%dT%H:%M:%S").dt.tz_localize(None)
df_6_minutos["DT_HR_LOC_DEIXADA"] = pd.to_datetime(df_6_minutos["DT_HR_LOC_DEIXADA"], format = "%Y-%m-%dT%H:%M:%S").dt.tz_localize(None)
df_6_minutos["Data_Hora_Local_Leitura"] = pd.to_datetime(df_6_minutos["Data_Hora_Local_Leitura"], format = "%Y-%m-%dT%H:%M:%S").dt.tz_localize(None)

vazio_cheio_conditions = [
    (df_6_minutos['QTDE_VAG_CAR'] == 0) & (df_6_minutos['QTDE_VAG_VAZ'] > 0),
    (df_6_minutos['QTDE_VAG_CAR'] > 0) & (df_6_minutos['QTDE_VAG_VAZ'] == 0)]
vazio_cheio_choices = ['Vazio', 'Cheio']

df_6_minutos["Condicao_Carga_Vagao"] = np.select(vazio_cheio_conditions, vazio_cheio_choices, default='CheioEVazio')

Tags: nodfdatadthrmutatehoraconsec
1条回答
网友
1楼 · 发布于 2024-04-29 16:54:20

如果我理解你的意图,你应该尝试:

df['<column_name>'].cumsum() % 6

%是Python中的module操作符,因此您将得到“6的最后一个倍数之上的累计和”。你知道吗

否则,您可以尝试创建一个要用于拆分数据的列,然后执行以下操作

df.groupby('<column_with_criteria>')['<column_name>'].cumsum()

这样你就可以在每组中取一个累积的和。它们将自动堆叠。你知道吗

相关问题 更多 >