Создайте новое поле в таблице и введите значение другого, но взяв значение предыдущей строки

Я хотел бы сделать следующее: у меня есть таблица с несколькими полями 'IdActive, Date, Closing', и я хочу добавить еще одно новое поле 'Closing_1', в которое я хочу ввести значения, которые находятся в поле Close, но принимаю значение перед записью в кто я Здесь я поместил изображение данных в свою таблицу и поместил поле, которое я хотел бы создать, с результирующими данными, чтобы посмотреть, сможете ли вы мне помочь.

introducir la descripción de la imagen aquí

Здесь я поместил код, который я использую:

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'])
    print(ord_df)


Cierre1(df)

Я отсортировал таблицу по полям IdActive и Date.

В ожидании вашего ответа я прощаюсь

Чаро

Я продолжил над ним работать и поставил следующее:

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)

результат, который дает мне сейчас это следующий introducir la descripción de la imagen aquí

0
задан 20.01.2017, 17:40
0 ответов

Уже я решил мою проблему. Здесь я говорю вам, как я это сделал. Я создал переменную NumIntervalo, чтобы помещать число интервала, который я хочу показать. Это код:

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['Cierre'].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)

Здесь я помещаю вам изображение с результатом.

introducir la descripción de la imagen aquí

0
ответ дан 03.12.2019, 17:36