- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有几个价格返回系列,我想以日期之间没有重叠的方式计算滚动 N 天相关性,即,如果我的第一个相关矩阵属于 [2000-04-05 - 2000 -06-04],下一个相关矩阵应该属于[2000-06-05 - 2000-08-04]。使用传统的 df.rolling(window=window).corr(df, pairwise=True) 将返回重叠日期。
我知道对滚动方法的结果进行切片会得到我想要的结果,但这意味着我们正在使用时间来计算我不会使用的相关性,从而导致资源浪费。
有什么建议吗?
更新:
这是输入的示例:
更新 2:
outputs for pd.show_versions()
INSTALLED VERSIONS
------------------
commit: None
python: 3.6.3.final.0
python-bits: 64
OS: Windows
OS-release: 10
machine: AMD64
processor: Intel64 Family 6 Model 63 Stepping 2, GenuineIntel
byteorder: little
LC_ALL: None
LANG: en
LOCALE: None.None
pandas: 0.20.3
pytest: 3.2.1
pip: 9.0.1
setuptools: 36.5.0.post20170921
Cython: 0.26.1
numpy: 1.14.5
scipy: 0.19.1
xarray: None
IPython: 6.1.0
sphinx: 1.6.3
patsy: 0.4.1
dateutil: 2.6.1
pytz: 2017.2
blosc: None
bottleneck: 1.2.1
tables: 3.4.2
numexpr: 2.6.2
feather: None
matplotlib: 2.1.0
openpyxl: 2.4.8
xlrd: 1.1.0
xlwt: 1.3.0
xlsxwriter: 1.0.2
lxml: 4.1.0
bs4: 4.6.0
html5lib: 0.999999999
sqlalchemy: 1.1.13
pymysql: None
psycopg2: None
jinja2: 2.9.6
s3fs: None
pandas_gbq: None
pandas_datareader: None
最佳答案
重采样
您可以使用 pd.DataFrame.resample
通过 "20D"
指定 20 天的时间规则。使用 on
参数指定要重新采样的列。生成的 resample
对象类似于 groupby
对象,可以处理 apply
方法。
def dcorr(df, n):
return df.resample(f"{n}D", on='date').apply(lambda d: d.corr())
dcorr(df, 20)
A B
date
2000-01-01 A 1.000000 0.241121
B 0.241121 1.000000
2000-01-21 A 1.000000 0.083664
B 0.083664 1.000000
2000-02-10 A 1.000000 0.432988
B 0.432988 1.000000
2000-03-01 A 1.000000 -0.269869
B -0.269869 1.000000
2000-03-21 A 1.000000 -0.188370
B -0.188370 1.000000
分组方式
df.set_index('date').groupby(pd.Grouper(freq='20D')).corr()
A B
date
2000-01-01 A 1.000000 0.241121
B 0.241121 1.000000
2000-01-21 A 1.000000 0.083664
B 0.083664 1.000000
2000-02-10 A 1.000000 0.432988
B 0.432988 1.000000
2000-03-01 A 1.000000 -0.269869
B -0.269869 1.000000
2000-03-21 A 1.000000 -0.188370
B -0.188370 1.000000
或者
df.set_index('date').groupby(pd.Grouper(freq='20D')).corr().unstack()[('A', 'B')]
date
2000-01-01 0.241121
2000-01-21 0.083664
2000-02-10 0.432988
2000-03-01 -0.269869
2000-03-21 -0.188370
Name: (A, B), dtype: float64
您还可以明确说明要关联的列:
df.resample("20D", on='date').apply(lambda d: d.A.corr(d.B))
np.random.seed([3, 1415])
n = 100
df = pd.DataFrame(np.random.rand(n,2), columns=['A','B'])
df['date'] = pd.date_range('2000-01-01', periods=n, name='date')
import pandas as pd
import numpy as np
np.random.seed([3, 1415])
n = 100
df = pd.DataFrame(
np.random.rand(n, 4),
pd.date_range('2000-01-01', periods=n, name='date'),
['ABC','XYZ __', 'One', 'Two Three']
)
def dcorr(df, n):
return df.resample(f"{n}D").apply(lambda d: d.corr())
dcorr(df, 20)
ABC XYZ __ One Two Three
date
2000-01-01 ABC 1.000000 -0.029687 0.403720 0.078800
XYZ __ -0.029687 1.000000 -0.231223 -0.333266
One 0.403720 -0.231223 1.000000 0.330959
Two Three 0.078800 -0.333266 0.330959 1.000000
2000-01-21 ABC 1.000000 -0.024610 0.206002 -0.059523
XYZ __ -0.024610 1.000000 -0.601174 -0.101306
One 0.206002 -0.601174 1.000000 0.149536
Two Three -0.059523 -0.101306 0.149536 1.000000
2000-02-10 ABC 1.000000 -0.361072 0.156693 -0.040827
XYZ __ -0.361072 1.000000 -0.077173 -0.232536
One 0.156693 -0.077173 1.000000 0.343754
Two Three -0.040827 -0.232536 0.343754 1.000000
2000-03-01 ABC 1.000000 0.204763 -0.013132 0.115202
XYZ __ 0.204763 1.000000 -0.339747 -0.206922
One -0.013132 -0.339747 1.000000 0.310002
Two Three 0.115202 -0.206922 0.310002 1.000000
2000-03-21 ABC 1.000000 0.062841 -0.245393 0.233697
XYZ __ 0.062841 1.000000 -0.213742 0.341582
One -0.245393 -0.213742 1.000000 0.251169
Two Three 0.233697 0.341582 0.251169 1.000000
关于python - 没有重叠的 Pandas rolling corr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50954589/
我试图使用 cor 函数找到 data.frame 对象每一列中的最大相关性。假设这个对象看起来像 A N A B C
它运行良好,直到它不是,并且不知道我做错了什么。我已将其简化为一个非常简单的 datsaset t: 1 2 3 4 5 6 7 8 0 3 16 3
我正在尝试使用 tqdm 或其他一些库在以下代码行中显示进度条: corrmatrix = adjClose.corr('spearman') 其中 adjClose 是一个数据框,其中包含许多股票代
我想在本质上创建列 bool 值后计算 Pandas 数据框的两列之间的相关系数。原版table有两列:一个 Group带有两个处理组之一的列,现在是 bool 值,还有一个 Age团体。这些是我要计
我想知道 MATLAB 是否有一个工具箱可以对稀疏矩阵进行常见的矩阵运算。 使用稠密矩阵,我可以计算相关图矩阵: R = rand(10,100) [r,p] = corr(R) 对于稀疏矩阵,我很想
我正在尝试使用 corr() 函数来计算加权权重。它的工作方式是第一个参数应该是一个矩阵,其中有两列对应于我们希望计算其相关性的两个变量,第二个参数是要应用于每对观察值的权重向量。 这是一个例子。 >
我有一个数据框如下: fsym EOS BTC BNB time
我有以下 pandas 数据框 Top15: 我创建了一个列来估计每人可引用文档的数量: Top15['PopEst'] = Top15['Energy Supply'] / Top15['Energ
我多次使用 pandas corr() 方法。但我不知道 pandas corr() 是否应用自动数据规范化。我知道必须在数据归一化之后进行关联。 我的问题是,如果我使用 pandas corr()
我想创建一个相关性,其中一个变量作为自变量,多个附加变量作为因变量,然后将其转换为热图。 我正在关注这些directions 。 我的代码: df_corr_interest = df[df.colu
我正在学习如何在 python3 中使用 pandas 库,并且遇到了 dataframe.corr() 的问题 这是我的数据集的示例 Date,Gender,Age at Booking,Curre
我有两个完美(或完全不完美?)相关的数字,我想找到它们之间的相关性。原始场景不同且更复杂,但问题出在 pg 使用的相关方法中的某个地方。请考虑以下查询: WITH all_series AS
我有几个价格返回系列,我想以日期之间没有重叠的方式计算滚动 N 天相关性,即,如果我的第一个相关矩阵属于 [2000-04-05 - 2000 -06-04],下一个相关矩阵应该属于[2000-06-
我是 pandas/python 的新手。我想知道函数 .corr 在计算相关性时如何删除具有多个变量的数据帧的空数据。 例如,假设我有以下数据框: # 'A1' 'A2' 'A3' 1
在 Pandas 中,我们可以用 .corr() 生成相关矩阵.我的问题很简单:是否保留了原始数据框的列顺序?从我的测试来看似乎是这样,但我想确定一下。 我问是因为我在 Python 3.7.3 上,
Pandas 提供两种不同关联函数的原因是什么? DataFrame.corrwith(other, axis=0, drop=False): Correlation between rows or
编辑以显示原始数据框的示例: df.head(4) shop category subcategory season date 20
我在 R 中使用随机森林的回归模型,我发现参数 corr.bias 根据手册是“实验性的”,我的数据是非线性的,我只是想知道将此参数设置为 true 是否可以增强结果,加上我不知道它对于非线性数据到底
x=[0.3, 0.3, 0.3, ..., 0.3](0.3 的数量:10) y=x x 和 y 之间的线性相关系数是多少? 对于此x 和y,所有对都指向同一点(0.3, 0.3)。我们可以说 x
我正在尝试在数据帧上运行我认为应该是一个简单的相关函数,但它在我认为不应该返回的地方返回 NaN。 代码: # setup import pandas as pd import io csv = io
我是一名优秀的程序员,十分优秀!