Как мы можем получать еженедельные и ежемесячные доходы на основе ежедневных цен закрытия акций? Все мои данные находятся в фрейме данных

Мой фрейм данных изначально выглядит так.

            index ticker   Adj Close
Date                                
2022-01-03  0      AXP    166.056259
2022-01-04  1      AXP    171.387100
2022-01-05  2      AXP    169.560791
2022-01-06  3      AXP    171.114563
2022-01-07  4      AXP    172.579315

Или, если я сбросил индекс, это выглядит так.

        Date ticker   Adj Close
0 2022-01-03  AXP    166.056229
1 2022-01-04  AXP    171.387100
2 2022-01-05  AXP    169.560791
3 2022-01-06  AXP    171.114563
4 2022-01-07  AXP    172.579300

У меня есть цены закрытия для 30 акций, и форма DF (1769, 3). Я могу легко получить возврат и средний доход:

returns = table.pct_change()
mean_returns = returns.mean()

Как проще всего получать еженедельные и ежемесячные доходы? Должна быть какая-то df.groupby 'W' или 'M', тогда возвраты рассчитываются автоматически, но когда я погуглил, я не нашел многого. Любые мысли о том, как заставить это работать в течение недель и месяцев?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
147
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете извлечь месяц и неделю в виде отдельных столбцов, как показано ниже, а затем вы можете использовать groupby с агрегатами первым и последним, что позволит вам вычислить прибыль за всю неделю (если вы держите акции)

import random
import pandas as pd

value = random.sample(range(1, 80), 79)
begin_date = '2019-10-16'

df = pd.DataFrame({'value': value,
                   'ticker':'tst',
                   'date':pd.date_range(begin_date, periods=len(value))})

df['year'] = df['date'].dt.isocalendar().year
df['week'] = df['date'].dt.isocalendar().week
df['month'] = df['date'].dt.month

weekly_increase = df.groupby(['year', 'week']).agg(['first','last'])
weekly_increase['increase'] = (weekly_increase[('value','last')] - weekly_increase[('value','first')]) / weekly_increase[('value','first')]

print(weekly_increase)

Результаты в

          value      ticker            date            month        increase
          first last  first last      first       last first last           
year week                                                                   
2019 42       5   59    tst  tst 2019-10-16 2019-10-20    10   10  10.800000
     43      79    3    tst  tst 2019-10-21 2019-10-27    10   10  -0.962025
     44      58   26    tst  tst 2019-10-28 2019-11-03    10   11  -0.551724
     45      70   31    tst  tst 2019-11-04 2019-11-10    11   11  -0.557143
     46      78   62    tst  tst 2019-11-11 2019-11-17    11   11  -0.205128

Это так? еженедельный_прирост = недельный_средний['сумма'].pct_change() ежемесячный_прирост = месячный_средний['сумма'].pct_change() Или это так? Weekly_Gains = Weekly_Mean['месяц'].pct_change() Monthly_Gains = Monthly_Mean['Неделя'].pct_change()

ASH 27.11.2022 15:50

Что вы считаете "недельным приростом"? Я не рассматриваю связь недельного дохода со средним значением дохода на этой неделе, например, при удержании акций в течение недели недельный доход равен "(последняя_цена - первая_цена)/первая_цена". Но, может быть, вы рассматриваете другие случаи, в таком случае вам придется объяснять...

vladmihaisima 27.11.2022 16:39

Да, выигрыш равен (последняя_цена - первая_цена)/первая_цена. У меня нет поля с именем «сумма» в фрейме данных. Вот что я говорю.

ASH 28.11.2022 04:05

Я отредактировал ответ, чтобы решить, что, как я понимаю, вы хотите, а именно потенциальный выигрыш в каждом периоде. Я бы сказал, давайте опустим среднее значение, так как, например, 50% (прибыль), за которым следует -50% (убыток) в двух последовательных периодах, не является нулевой прибылью в целом (например: если значение равно 1, 1,5, 0,75, тогда 50% прибыль, за которой следует потеря 50%, на самом деле является потерей 25%, а не прибылью 0).

vladmihaisima 28.11.2022 09:40

Другие вопросы по теме