Python - Coger datos de un registro anterior e introducirlo en registro siguiente

 
Vista:
sin imagen de perfil

Coger datos de un registro anterior e introducirlo en registro siguiente

Publicado por Rosario (13 intervenciones) el 20/01/2017 16:32:37
Quisiera hacer lo siguiente: Tengo una tabla con varios campos 'IdActivo,Fecha,Cierre' y quiero añadirle otro campo nuevo 'Cierre_1' el cual quiero introducir los valores que hay en el campo Cierre pero cogiendo el valor anterior al registro en el que estoy. Aquí os pongo una imagen de los datos de mi tabla y he puesto el campo que me gustaría crear con los datos resultantes a ver si me podriais ayudar.
Tengo en cuenta que esto lo tengo que hacer para cada tipo de IdActivo distinto. Aquí tengo tres (1,2,3) por eso he ordenado la tabla por IdActivo y Fecha.
Aquí os pongo lo que quiero en la imagen.


error-cierre1

Aquí os pongo el código que utilizo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import pyodbc
import pandas as pd
import numpy as np
 
df = pd.DataFrame({'IdActivo': [1,2,3,3,2,1,3],
                   'Fecha' : ['2009-01-01','2009-02-01','2009-02-01','2009-03-01','2009-03-01','2009-03-01','2009-04-01'],
                   'Cierre' : [25.5,26.5,25.8,26.8,24.8,27.5,27.8]})
 
 
def Cierre1(df):
    ord_df = df.sort_values(by=['IdActivo', 'Fecha'])
    ord_df ['Cierre1'] = ord_df.iloc[1:]['Cierre']
    idx = ord_df.iloc[1:]['IdActivo'].values != ord_df.iloc[:len(ord_df) - 1]['IdActivo'].values
    idx = np.append([True], idx)
    ord_df.loc[idx, 'Cierre1'] = np.nan
    print(ord_df)
 
Cierre1(df)

A ver si me podrías decir como podría coger yo el valor del registro anterior y meterlo en el campo deseado.

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
sin imagen de perfil

Coger datos de un registro anterior e introducirlo en registro siguiente

Publicado por Rosario (13 intervenciones) el 24/01/2017 19:50:18
Hola a todos. Ya he conseguido hacer lo que os había pedido consejo. Me he creado una variable para controlar el intervalo que quiero mostrar. Así sólo con cambiar el valor de la variable no tendré que modificar nada más del procedimiento. Aquí os pongo la solución.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import pyodbc
import pandas as pd
import numpy as np
 
df = pd.DataFrame({'IdActivo': [1,2,3,3,2,1,1,3,2],
                   'Fecha' : ['2009-01-01','2009-02-01','2009-02-01','2009-03-01','2009-03-01','2009-03-01','2009-04-01','2009-04-01','2009-04-01'],
                   'Cierre' : [25.5,26.04,88.8,26.8,24.8,27.5,23.05,27.8,30.20]})
 
NumIntervalo =2 # Me he creado una variable para poner el número de intervalo que quiero mostrar. Así sólo con cambiar el valor aquí no tendré que modificar el procedimiento.
 
def Cierre1(df,NumIntervalo):
    ord_df = df.sort_values(by=['IdActivo', 'Fecha'])
    ord_df ['Cierre1'] = ord_df['IdActivo'].shift(NumIntervalo)
    idx = ord_df.iloc[NumIntervalo:]['IdActivo'].values != ord_df.iloc[:len(ord_df) - NumIntervalo]['IdActivo'].values
    for i in range(NumIntervalo):
        idx = np.append([False], idx)
 
 
    ord_df.loc[idx, 'Cierre1'] = np.nan
    print(ord_df)
 
Cierre1(df,NumIntervalo)

Aquí os pongo una imagen para que veais el resultado.


control
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
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 registro anterior e introducirlo en registro siguiente

Publicado por xve (1646 intervenciones) el 25/01/2017 08:11:17
Gracias por compartirlo Rosario!!!
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

Coger datos de un registro anterior e introducirlo en registro siguiente

Publicado por Jesús (1 intervención) el 24/10/2022 18:30:15
Hola... me ha servico un montón tu código, podrías por favor explicarme cómo hacerlo si lo que quiero en cada fila es el registro posterior?
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