df.resample("W").ffill().pct_change(periods=1)
По этой ссылке https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.pct_change.html:
периоды: int, по умолчанию 1
Периоды для сдвига дляформирование процентного изменения.
freq: DateOffset, timedelta или строка псевдонима смещения, необязательно
Увеличение для использования из API временных рядов (например, 'M' или BDay ()).
Если вы хотите узнать, на что способны значения частоты, вы можете увидеть это здесь: https://pandas.pydata.org/pandas-docs/stable/timeseries.html#dateoffset-objects
Редактировать: я прочитал ваш вопрос еще раз и заметилчто «еженедельные доходы» являются ключом к вашей задаче.Таким образом, ffill не будет тем решением, которое вы ищете.Скорее всего, вы хотите рассчитать общую сумму для каждой рабочей 6-дневной недели, поэтому «сумма» должна быть более подходящей, поэтому здесь:
1) df.resample("W").sum():
price
2015-01-04 1
2015-01-11 20
2015-01-18 45
2015-01-25 70
2015-02-01 95
2015-02-08 120
2015-02-15 145
2015-02-22 170
2015-03-01 195
2015-03-08 220
2015-03-15 245
2015-03-22 270
2015-03-29 295
2015-04-05 320
2015-04-12 345
2015-04-19 370
2015-04-26 395
2015-05-03 420
2015-05-10 445
2015-05-17 470
2015-05-24 294
2) затем, применяя pct_change(period=1)
, мы хотели бы выделить изменения между каждой строкой (учтите, что periods=1
здесь избыточно: мы можем использовать только pct_change()
):
price
2015-01-04 NaN
2015-01-11 19.000000
2015-01-18 1.250000
2015-01-25 0.555556
2015-02-01 0.357143
2015-02-08 0.263158
2015-02-15 0.208333
2015-02-22 0.172414
2015-03-01 0.147059
2015-03-08 0.128205
2015-03-15 0.113636
2015-03-22 0.102041
2015-03-29 0.092593
2015-04-05 0.084746
2015-04-12 0.078125
2015-04-19 0.072464
2015-04-26 0.067568
2015-05-03 0.063291
2015-05-10 0.059524
2015-05-17 0.056180
2015-05-24 -0.374468
Если вынапример, чтобы выделить pct-изменение между двумя строками, тремя, ..., n строками, вам необходимо настроить ключевое слово periods
:
df.resample("W").sum().pct_change(periods=2)
2015-01-04 NaN
2015-01-11 NaN
2015-01-18 44.000000
2015-01-25 2.500000
2015-02-01 1.111111
2015-02-08 0.714286
2015-02-15 0.526316
2015-02-22 0.416667
2015-03-01 0.344828
2015-03-08 0.294118
2015-03-15 0.256410
2015-03-22 0.227273
2015-03-29 0.204082
2015-04-05 0.185185
2015-04-12 0.169492
2015-04-19 0.156250
2015-04-26 0.144928
2015-05-03 0.135135
2015-05-10 0.126582
2015-05-17 0.119048
2015-05-24 -0.339326
Resample (). sum () важно, когда вы хотитеРассмотрим общие недельные тенденции.Но, может быть, вы хотите выделить некоторые другие тенденции роста.Поэтому здесь мы используем ffill (), которая заполняет «пустую» строку предыдущим значением.
1) df.resample ("W"). Ffill ()
price
2015-01-04 1
2015-01-11 6
2015-01-18 11
2015-01-25 16
2015-02-01 21
2015-02-08 26
2015-02-15 31
2015-02-22 36
2015-03-01 41
2015-03-08 46
2015-03-15 51
2015-03-22 56
2015-03-29 61
2015-04-05 66
2015-04-12 71
2015-04-19 76
2015-04-26 81
2015-05-03 86
2015-05-10 91
2015-05-17 96
2015-05-24 99
Вы можете заметить, что эти строки представляют дни недели, которые мы не использовали в "df".Они в основном принимают значения за первый день, предшествующий дате в строке: 2015-01-04 от 2015-01-02 2015-01-11 от 2015-01-09 и т. Д.
2) df.resample("W").ffill().pct_change()
price
2015-01-04 NaN
2015-01-11 5.000000
2015-01-18 0.833333
2015-01-25 0.454545
2015-02-01 0.312500
2015-02-08 0.238095
2015-02-15 0.192308
2015-02-22 0.161290
2015-03-01 0.138889
2015-03-08 0.121951
2015-03-15 0.108696
2015-03-22 0.098039
2015-03-29 0.089286
2015-04-05 0.081967
2015-04-12 0.075758
2015-04-19 0.070423
2015-04-26 0.065789
2015-05-03 0.061728
2015-05-10 0.058140
2015-05-17 0.054945
2015-05-24 0.031250
Учитывая вышеизложенное, мы можем использовать другие частоты, например, ежемесячно:
df.resample("M").sum().pct_change()
price
2015-01-31 NaN
2015-02-28 1.727273
2015-03-31 0.833333
2015-04-30 0.419048
2015-05-31 -0.209884