Умножение столбца с возрастающим коэффициентом на дату в Pandas

#python-3.x #pandas #dataframe #time-series #multiplication

#python-3.x #pandas #фрейм данных #временные ряды #умножение

Вопрос:

У меня есть фрейм данных с несколькими столбцами, однако в этом случае важны только три: дата (datetime), Страна и значение. Фрейм данных содержит данные временных рядов, которые охватывают несколько лет. Для простоты предположим, что все числа в столбце «Значение» имеют начальное значение 2.

 df

Date         Country         Value
2020-01-02   UK              2
2020-01-02   USA             2
2020-01-02   AU              2
2020-01-03   UK              2
2020-01-03   USA             2
2020-01-03   AU              2
...
  

Чего я хочу добиться, так это умножения на коэффициент, который меняется каждый месяц, от начального значения до конечного значения. Ежемесячное изменение коэффициента рассчитывается как разница между коэффициентом окончания и коэффициентом начала, деленная на количество месяцев.

 start_factor = 1.1
end_factor = 1.5
start_date = '2020-02-01'
end_date = '2020-06-01'
  

Я хочу умножить столбец «Значение» на правильный коэффициент для данного месяца.

Результат, который я хочу:

 Date         Country         Value
2020-01-01   UK              2
2020-01-01   USA             2
...
2020-02-01   UK              2.2
2020-02-01   USA             2.2
...
2020-03-01   UK              2.4
2020-03-01   USA             2.4
...
2020-04-01   UK              2.6
2020-04-01   USA             2.6
...
2020-05-01   UK              2.8
2020-05-01   USA             2.8
...
2020-06-01   UK              3
2020-06-01   USA             3
...
2020-07-01   UK              3
2020-07-01   USA             3
...
2020-08-01   UK              3
2020-08-01   USA             3
  

Каков наилучший способ достижения этого? Я пытался создать диапазон дат с помощью pd.date_range(start = start_date, end = end_date, freq='M') , перебирать его и изменять коэффициенты с помощью df.loc, но я не уверен, что это лучший способ сделать это. Также: как бы я это сделал, если бы мне просто нужны были коэффициенты в новом столбце?

Ответ №1:

Я не уверен, я получил вопрос, но вот мое предложение:

 import pandas as pd

def create_add_series(start, end, factor):
    start_year, start_month = [int(x) for x in start.split('-')]
    index = pd.date_range(start, end, freq='MS')
    values = [((x.year - start_year) * 12   x.month - start_month) * factor for x in index]
    return pd.Series(values, index)

series = create_add_series('2020-01', '2020-06', 1.1)

df.Values = [df.loc[x, 'Values']   series.loc[df.loc[x, 'Date']] for x in df.index]
  

Комментарии:

1. Это умножает коэффициент на количество месяцев. Я хочу, чтобы коэффициент постепенно увеличивался с start_factor до end_factor в течение нескольких месяцев.