首页 > 解决方案 > 使用列值的热图相关性?

问题描述

假设我有以下美国各州的重复观察数据,这些数据具有一定的价值:

US_State Value
Alabama  1
Alabama  10
Alabama  9
Michigan 8
Michigan 9
Michigan 2
...

如何为所有 US_State 组合之间的值生成成对相关性?我尝试了一些不同的方法(pivot、groupby 等),但我似乎无法理解正确的方法。

理想的输出如下所示:

          Alabama   Michigan    ...
Alabama      1          0.5
Michigan     0.5        1
...

标签: pythonheatmapcorrelation

解决方案


有一种方法可以最大限度地利用 Pandas,但这只是假设输入数据集中的每个状态具有相同数量的观察值,否则相关系数并没有真正意义,结果会变得有点古怪。

import pandas as pd

df = pd.DataFrame()
df['US_State'] = ["Alabama", "Alabama", "Alabama", "Michigan", "Michigan", "Michigan", "Oregon", "Oregon", "Oregon"]
df['Value'] = [1, 10, 9, 8, 9, 2, 6, 1, 2]

pd.DataFrame(df.groupby("US_State")['Value'].apply(lambda x: list(x))).T.apply(lambda x: pd.Series(*x), axis=0).corr()

这导致

US_State   Alabama  Michigan    Oregon
US_State                              
Alabama   1.000000 -0.285578 -0.996078
Michigan -0.285578  1.000000  0.199667
Oregon   -0.996078  0.199667  1.000000

代码的基本作用是将每个状态的数据收集到单个单元格中作为列表,将数据帧转置为状态列,然后将收集到的列表数据单元格扩展为每个状态的数据帧行。然后你可以调用corr()pandas 数据框的标准方法。


推荐阅读