1
resposta

Soma condicional Pandas

Estou trabalhando com o pandas em python e para o seguinte dataframe ("df_setembro") Insira aqui a descrição dessa imagem para ajudar na acessibilidade para o qual gostaria de fazer uma soma condicional com relação a duas colunas. Ou seja gostaria de somar os dados da coluna "Demanda ativa" para todos os valores onde a "Dia da semana" for segunda de segunda a sexta (Monday to friday) e quando os valores da coluna "Horário" forem de "17:30:00" até "20:30:00"

df_ponta.iloc[(df_setembro['Dia da Semana'] == ['Monday':'Friday']) & (df_setembro['Horário'] == ['17:30:00': '20:30:00']), 'Demanda Ativa'].sum()

tentei realizar dessa forma mas obtive erro de sintaxe, alguém tem alguma solução?

1 resposta

Olá boa noite! Como a seleção que você quer fazer é um pouco complexa, vamos fazer as coisas por partes para ficar mais fácil:

# selecionando somente os dias que estão entre segunda e sexta:

dias_selecionados = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
selecao_por_dia_da_semana = df_setembro['Dia da Semana'].isin(dias_selecionados)

A seleção por horário é um pouco mais complicada, então vou fazer com um laço for:

# fazendo a seleção caso o horário esteja entre 17:30 e 20:30

horas_selecionadas = []
tempo_min = pd.to_datetime('17:30:00').time()
tempo_max = pd.to_datetime('20:30:00').time()
for item in df_setembro['Horário'].items():
    tempo_atual = item[1].time()
    horas_selecionadas.append((tempo_atual >= tempo_min) and (tempo_atual <= tempo_max))

selecao_por_horario = pd.Series(horas_selecionadas)

Agora, basta fazer a seleção e somar:

df_setembro[ ( selecao_por_dia_da_semana ) & ( selecao_por_horario ) ][ 'Demanda Ativa' ].sum()

A solução ficou um pouco complicada, mas acredito que tudo deve funcionar corretamente. Espero ter ajudado!