Python - Coger datos de un campo según una condición

 
Vista:
sin imagen de perfil

Coger datos de un campo según una condición

Publicado por Rosario (13 intervenciones) el 30/01/2017 20:31:35
Trabajo con dataframe en pandas.
A ver si alguien me podría ayudar en lo siguiente: Quisiera rellenar un campo nuevo creado en el dataframe con el valor 0 ó 1 si se cumple una condición determinada en los registros del dataframe. Los campos del dataframe son los siguientes: IdActivo,Fecha,Cierre. El campo Fecha esta compuesto por fecha y hora. Ej: 1990-01-02 10:10:10. Quiero coger los registros en los que el día del campo Fecha sea igual a jueves y que la hora del mismo campo sea igual a las 10:10:00. Si el registro cumple estas dos condiciones que ponga valor 1 en el campo nuevo sino el valor 0.

A ver si alguien me puede ayudar.

Gracias de antemano.

Charo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 2.239
Plata
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Coger datos de un campo según una condición

Publicado por xve (1646 intervenciones) el 30/01/2017 21:25:00
Hola Rosario, haber si te sirve esto de python 2.x:

1
2
3
4
5
6
import datetime
fecha=datetime.datetime(1990,01,02,10,10,10)
print fecha.weekday()
print fecha.hour
print fecha.minute
print fecha.second

Te sirve?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Coger datos de un campo según una condición

Publicado por Rosario (13 intervenciones) el 06/02/2017 19:32:35
Hola a todos. Aquí os pongo como he solucionado mi problema por si a alguien le surge la misma duda.

Este es el código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import pyodbc
import pandas as pd
import numpy as np
from datetime import datetime
 
df = pd.DataFrame({'IdActivo': [1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2],
                   'Fecha': ['1990-01-02','1990-01-03','1990-01-04','1990-01-05','1990-01-08',\
                                  '1990-01-09','1990-01-10','1990-01-11','1990-01-12' ,'1990-01-15',\
                                  '1990-01-16', '1990-01-17', '1990-01-18','1990-01-19','1990-01-22',\
                                  '1990-01-23 ', '1990-01-24', '1990-01-25','1990-01-26','1990-01-29'],
                   'Hora': ['10:10:00','10:11:00','10:12:00','10:13:00','10:10:00',\
                                  '10:10:00','10:17:00','10:14:00','11:14:00','12:14:00',\
                                  '10:10:00', '10:20:00', '14:22:00','15:22:00','16:22:00',\
                                  '10:10:00', '00:00:00', '00:00:00','00:00:00','00:00:00']})
def Inicio():
    numHoraDia = '10:10:00'
    numDia = 2  # para nosotros el 2 será el martes ya que le añadimos +1 al lunes que es 0 por defecto
    nomDiasSemanaHora = "  Resultado";    inpfield = "Fecha" ;    oupfield = "Dia_Semana"
 
    df_final = Fecha_Dia_Hora(df,inpfield,oupfield,numHoraDia,numDia,nomDiasSemanaHora)
    print (df_final)
 
 
def Fecha_Dia_Hora(df, inpfield, oupfield,numHoraDia,numDia,nomDiasSemanaHora):
    ord_df = df.sort_values(by=['IdActivo', 'Fecha'])
    ord_df[inpfield] = pd.to_datetime(ord_df[inpfield])  # Esta línea pone el campo nuevo 'inpfield' a tipo class 'pandas.tslib.Timestamp'
    ord_df[oupfield] = ord_df[inpfield].dt.dayofweek + 1  # Resultados: 0=Lunes, 1=Martes... 4=Viernes Le he añadido un 1 para que empiece por 1=Lunes.....
    ord_df[nomDiasSemanaHora] = np.NaN
    ord_df.ix[np.logical_and(ord_df[oupfield] == numDia, ord_df.Hora == numHoraDia), [nomDiasSemanaHora]] = '1'
    return ord_df.sort_index()
 
def Fin():
    print("FIN")
 
if __name__ == "__main__":
    Inicio()
    Fin()

Aquí os pongo el resultado con una imagen.

resultado_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar