python - 与 Pandas 中的 Groupby 滚动相关

标签 python pandas group-by correlation

假设我有一个类似于下面的 Pandas 数据框,我将如何获得 2 个特定列之间的滚动相关性(在此示例中为 2 天)并按“ID”列分组?我熟悉 Pandas rolling_corr() 函数,但我不知道如何将它与 groupby() 子句结合起来。

我有什么:

ID  Date    Val1    Val2
A   1-Jan   45      22
A   2-Jan   15      66
A   3-Jan   55      13
B   1-Jan   41      12
B   2-Jan   87      45
B   3-Jan   82      66
C   1-Jan   33      34
C   2-Jan   15      67
C   3-Jan   46      22

我需要什么:

ID  Date    Val1    Val2    Rolling_Corr
A   1-Jan   45      22  
A   2-Jan   15      66      0.1
A   3-Jan   55      13      0.16
B   1-Jan   41      12  
B   2-Jan   87      45      0.15
B   3-Jan   82      66      0.05
C   1-Jan   33      34  
C   2-Jan   15      67      0.09
C   3-Jan   46      22      0.11

谢谢!

最佳答案

您实际上可以从这里的简单方法开始: Pandas Correlation Groupby

然后像这样添加rolling(3):

df.groupby('ID')[['Val1','Val2']].rolling(3).corr()

我已将窗口从 2 更改为 3,因为窗口大小为 2 时您只会得到 1 或 -1。不幸的是,该输出(未显示)有点冗长,因为它在以下情况下输出 2x2 相关矩阵您只需要一个标量。 但是通过额外的一行,您可以使输出更加简洁:

df2 = df.groupby('ID')[['Val1','Val2']].rolling(3).corr()

df2.groupby(level=[0,1]).last()['Val1']

ID   
A   0         NaN
    1         NaN
    2   -0.996539
B   3         NaN
    4         NaN
    5    0.879868
C   6         NaN
    7         NaN
    8   -0.985529

关于python - 与 Pandas 中的 Groupby 滚动相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28998998/

相关文章:

python - 由 IndexedRowMatrix().columnSimilarities() 检索的 PySpark 相似性无法访问 : INFO ExternalSorter: Thread * spilling in-memory map

python - REGEX:选择两个斜杠之间的匹配项?

python - 来自迭代多个 URL 的 JSON 响应以存储 DataFrame

python - 根据聚类按行划分seaborn矩阵

mysql - 两个字段的组合分组

sql - Postgres : GROUP BY several column

python - 创建由另一列 pandas 分组的一列的排列

python - 如何在 'int' 函数中将数字四舍五入到十分之一?

python - 为什么 Windows 上的 gitpython 总是出现文件未找到的错误?

python - 将 pandas 数据框转换为 networkx 图