Я пытаюсь вычислить экспоненциально взвешенную ковариацию между набором данных, используя функцию pandas.ewm.cov ().Звучит глупо, но у меня возникают проблемы с доступом к результату: в частности, как получить последнюю матрицу (в этом примере 999-й) в качестве фрейма данных панд (нарезка и т. Д., Кажется, также влияет на внутренние индексы 0, 1, 2).Кто-нибудь может предоставить эффективное и масштабируемое решение?
import pandas as pd
import numpy as np
if __name__ == "__main__":
df = pd.DataFrame(np.random.randn(1000, 3))
covs = df.ewm(span = 180).cov()
print(covs)
print(covs.iloc[-3:,:]) #this does not work anymore If I change the
# dimension of the df from 3 i.e. to 4.
0 1 2
0 0 NaN NaN NaN
1 NaN NaN NaN
2 NaN NaN NaN
1 0 0.032264 -0.163599 -0.125954
1 -0.163599 0.829545 0.638665
2 -0.125954 0.638665 0.491707
... ... ... ...
999 0 0.878615 0.011006 0.157368
1 0.011006 0.905043 0.078750
2 0.157368 0.078750 1.058194
-----------------------------------
0 1 2
999 0 1.160964 0.030447 -0.030059
1 0.030447 0.880037 0.048503
2 -0.030059 0.048503 0.975215
РЕДАКТИРОВАНИЕ: Только что вышел со следующим решением.Любое предложение для более чистого и / или прямого предложения наиболее ценится.
import pandas as pd
import numpy as np
if __name__ == "__main__":
df = pd.DataFrame(np.random.randn(1000, col = 3))
covs = df.ewm(span = 180).cov()
covs = covs.iloc[-len(df.columns):]
covs = covs.reset_index(level = 0, drop = True)
print(covs)