【问题标题】:Pandas correlation table limited to m columns by n rowsPandas 关联表限制为 m 列乘 n 行
【发布时间】:2016-09-16 20:47:32
【问题描述】:

我知道如何创建一个(可爱的)Pandas 相关表,按相关性排序:

c = df.corr().abs()
np.set_printoptions(threshold='nan')
s = c.unstack()
so = s.order(kind="quicksort")
pprint(so)

这太棒了。

问题是,这会输出整个值矩阵的相关性——对于所有列 x 所有列,在交叉矩阵中。

但是,如果我只想检查一列,例如 df['m'],以了解它与所有其他列的相关性怎么办?

我是否需要创建两个数据框并检查它们之间的相关性?有更快的脚本吗?

【问题讨论】:

    标签: python pandas dataframe correlation


    【解决方案1】:

    IIUC,你可以把 corr() DataFrame 像这样切片:

    c = df.corr()['m'].abs()
    so = c.sort_values(kind='quicksort')
    print(so)
    

    【讨论】:

      【解决方案2】:

      您可以简单地遍历df 的列并根据相关性构建一个系列:

      result = (pd.Series([df['m'].corr(df[col]) for col in df], index=df.columns)
                .abs().sort_values())
      

      如果您打算对许多列执行此操作,计算整个相关矩阵并使用.loc 选择感兴趣的行可能会更快:so.loc['m']。


      例如,

      import numpy as np
      import pandas as pd
      np.random.seed(2016)
      
      df = pd.DataFrame(np.random.random((4,4)), columns=list('klmn'))
      result = (pd.Series([df['m'].corr(df[col]) for col in df], index=df.columns)
                .abs().sort_values())
      print(result)
      # l    0.041438
      # n    0.086255
      # k    0.393375
      # m    1.000000
      # dtype: float64
      
      c = df.corr().abs()
      s = c.unstack()
      so = s.sort_values()  # s.order is deprecated. use s.sort_values
      print(so.loc['m'])
      # l    0.041438
      # n    0.086255
      # k    0.393375
      # m    1.000000
      # dtype: float64
      

      注意result和so.loc['m']是一样的。

      【讨论】:

        猜你喜欢
        • 2021-02-11
        • 1970-01-01
        • 1970-01-01
        • 2021-12-31
        • 2020-03-28
        • 2014-11-08
        • 1970-01-01
        • 1970-01-01
        • 2020-11-18
        相关资源
        最近更新 更多