Это больше похоже на приведенный вами пример:
сначала создайте фрейм данных (со столбцом даты в качестве индекса):
import pandas as pd
column_names = ['Date', 'ID', 'Name', 'Old_Value', 'New_Value']
values = [['2018-01-01', '101', 'Bob', '10.0', '12.0'], ['2018-01-01', 102, 'Tim', 9.0, 14.0],['2018-02-01', 101, 'Bob', 12.0, 9.0], ['2018-02-14', 101, 'Bob', 9.0, 7.0], ['2018-02-14', 102, 'Tim', 14.0, 19.0], ['2018-02-21', 101, 'Bob', 7.00, 6.0], ['2018-02-21', 102, 'Tim', 19.0, 16.0], ['2018-02-23', 102, 'Tim', 16.0, 14.0]]
df = pd.DataFrame(values, columns = column_names).set_index('Date', drop = True)
Затем определите идентификатор пользователя, для которого вы хотите обновить значение:
# the user id of which you want to change the value, 101 of Bob in this case
user_id = 101
# get the last line of the user_id, and take its 'new' value as old value and the name
last_line = df.loc[df.ID == user_id, ['New_Value', 'Name']].iloc[-1]
name = last_line.Name
old_value = last_line.New_Value
# apply a function on the 'new' old value to calculate the 'new' new value
new_value = old_value - 4 #(or any other function)
# set the date for the new value
new_date = '2018-02-25'
#update the dataframe
df = df.append(pd.DataFrame([[user_id, name, old_value, new_value]], index = [new_date], columns = df.columns))
df.index.name = 'Date'
в этом случае, в результате:
df =
ID Name Old_Value New_Value
Date
2018-01-01 101 Bob 10.0 12.0
2018-01-01 102 Tim 9 14
2018-02-01 101 Bob 12 9
2018-02-14 101 Bob 9 7
2018-02-14 102 Tim 14 19
2018-02-21 101 Bob 7 6
2018-02-21 102 Tim 19 16
2018-02-23 102 Tim 16 14
2018-02-25 101 Bob 6 2