Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将Pandas中的滚动相关输出简化为单索引数据帧_Python_Pandas_Dataframe_Correlation - Fatal编程技术网

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

Python 将Pandas中的滚动相关输出简化为单索引数据帧,python,pandas,dataframe,correlation,Python,Pandas,Dataframe,Correlation,我有一个合理大小的时间序列数据帧,我希望有一个合理格式的滚动成对相关数据 熊猫有一个非常有趣的“滚动”功能,可以进行正确的计算 dfCorrelations = dfReturns.rolling(correlation_window).corr() 但相关网格的输出时间序列不便于我以后使用(所示为给定日期子集的样本输出) 有没有一种方法可以进行同样的计算,但只在一个简单的时间序列数据帧中获得唯一的、非对角关联的输出?比如说,使用一个类似 ['III LN x ABN NA', 'III L

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

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

dfCorrelations = dfReturns.rolling(correlation_window).corr()
但相关网格的输出时间序列不便于我以后使用(所示为给定日期子集的样本输出)

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

['III LN x ABN NA', 'III LN x AGN NA', 'III LN x AGS BB', 'ABN NA x AGN NA', 'ABN NA x AGS BB', ...]

谢谢一个非常有效的解决方案。嗨@Alexander,我希望这个解决方案能为我工作,但我无法让它工作:
pairs=df.columns.get\u values().tolist()
抛出一个错误,说
AttributeError:'MultiIndex'对象没有属性“get\u values”
。我认为这可能与Pandas版本有关(我使用的是1.0.5)。我尝试了
get_level_values(0)
,但下一步失败了:
[“{0}vs.{1}”.format(*pair)for pair in pair in pair]
使用
索引器:元组索引超出范围
您(或其他人)介意解释一下那里发生了什么吗?提前谢谢!前一行
df.unstack().sort_index(axis=1)
将多索引(日期和股票代码)转换为常规索引(仅日期)。感谢@Alexander的及时回复!事实上,我得到的示例是在
python3.5
pandas=0.20
上工作的,但不是在
python3.7.7
pandas=1.0.5
下工作的。Python 3.5/1.0.5设置中显示的
AttributeError:“MultiIndex”对象没有属性“get\u values”
。介于两者之间的某个地方一定发生了变化…从
pandas>=1开始,
.get\u values()
已被弃用。为了使@Alexander的示例在这种情况下工作,请将
pairs=df.columns.get_values().tolist()
更改为
pairs=df.columns.to_numpy().tolist()
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