У меня есть некоторые данные о ценах (например, от Yahoo Finance) с переменной datetime с ежедневной детализацией в качестве индекса, можно вызвать этот df и сказать, что это цена закрытия Microsoft в качестве переменной значения. Чтобы получить среднемесячную цену закрытия, я, очевидно, могу сделать одно из этих двух:
import yfinance as yf
import pandas as pd
df = yf.download("CMG", start="2012-01-01",end="2020-01-01" )
dfm = df.resample("M").mean()
dfm2 = df.groupby(df.index.to_period("M")).mean()
На мой взгляд, они выглядят очень похожими, с той лишь разницей, что я могу сказать, что при повторной выборке новый индекс даты и времени является концом month и groupby to_period будут иметь индекс гггг-мм.
Теперь я хочу добавить столбец к df с ежедневной детализацией, который имеет для каждой дневной цены закрытия отклонение от ее среднемесячного значения. Итак, 1 / янв / 2020 - среднее (янв-20), 2 / янв / 2020 - среднее (янв-20), 1 / фев / 2020 - среднее (фев-20).
Поскольку dfm и df имеют разные индексы, я не могу просто выполнить df-dfm.
Единственное, что я могу придумать, это l oop через df, поставить счетчик на dfm и поставить оператор if в l oop, очень похож на подход типа c, но не на pythoni c. Думаю, это выглядело бы так (но это не сработало):
counter = 0
df["dailyminusmonthly"] =""
for i in df:
if i.index <= dfm[counter].index:
i.dailyminusmonthly = i.close - dfm.close[counter]
else:
counter = counter +1
i.dailyminusmonthly = i.close - dfm.close[counter]