将Pandas滚动相关输出简化为单索引数据帧

2024-05-13 08:34:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个合理大小的数据帧的时间序列数据,我想有滚动成对相关数据在一个合理的格式。在

熊猫有一个非常有趣的“滚动”功能,可以进行正确的计算

dfCorrelations = dfReturns.rolling(correlation_window).corr()

但是相关网格的输出时间序列对于我以后的使用是不方便的(显示了给定日期子集的示例输出)。在

enter image description here

有没有一种方法可以进行同样的计算,但是在一个简单的时间序列数据帧中得到输出,并且只有唯一的非对角相关?比如使用一个类似于

^{pr2}$

Tags: 数据功能网格示例格式时间序列window
1条回答
网友
1楼 · 发布于 2024-05-13 08:34:13
from itertools import combinations

# Create sample dataset.
idx = pd.MultiIndex(
    levels=[[u'2017-1-1', u'2017-1-2'], [u'A', u'B', u'C']],
    labels=[[0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2]],
    names=[u'date', u'ticker'])
df = pd.DataFrame(np.random.randn(6, 3), index=idx, columns=list('ABC'))
for tup in zip(range(6), range(3) * 2):
    df.iloc[tup] = 1

>>> df
                        A         B         C
date     ticker                              
2017-1-1 A       1.000000  0.440276 -1.087536
         B      -0.809949  1.000000 -0.548897
         C       0.922866 -0.788699  1.000000
2017-1-2 A       1.000000 -0.106493  0.034319
         B       0.080990  1.000000  0.218323
         C       0.051651 -0.680358  1.000000

# Unstack and remove duplicates.
tickers = df.columns.tolist()
df = df.unstack().sort_index(axis=1)
pairs = df.columns.get_values().tolist()
df.columns = ["{0} vs. {1}".format(*pair) for pair in pairs]
mask = [n for n, pair in enumerate(pairs) if pair in list(combinations(tickers, 2))]
df = df.iloc[:, mask]
>>> df
           A vs. B   A vs. C   B vs. C
date                                  
2017-1-1 -0.809949  0.922866 -0.788699
2017-1-2  0.080990  0.051651 -0.680358

相关问题 更多 >