我正在尝试将这个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')
如果我理解你的意图,你应该尝试:
%
是Python中的module操作符,因此您将得到“6的最后一个倍数之上的累计和”。你知道吗否则,您可以尝试创建一个要用于拆分数据的列,然后执行以下操作
这样你就可以在每组中取一个累积的和。它们将自动堆叠。你知道吗
相关问题 更多 >
编程相关推荐