【问题标题】:How to test correlation between two sets in python?如何在python中测试两组之间的相关性?
【发布时间】:2020-05-28 01:53:42
【问题描述】:

我有两个不同的数据框,其中一个如下

df1=

      Datetime      BSL
0          7  127.504505
1          8  115.254132
2          9  108.994275
3         10  102.936860
4         11   99.830400
5         12  114.660522
6         13  138.215339
7         14  132.131075
8         15  121.478006
9         16  113.795645
10        17  114.038462

另一个是df2=

    Datetime       Number of Accident
0          7                  3455
1          8                 17388
2          9                 27767
3         10                 33622
4         11                 33474
5         12                 12670
6         13                 28137
7         14                 27141
8         15                 26515
9         16                 24849
10        17                 13013

第一个基于时间的人的血糖水平(7 表示早上 7 点到早上 8 点之间) 第二个是这些时间之间的事故次数

当我尝试这段代码时

df1.corr(df2, "pearson")

我得到了错误:

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我该如何解决?或者,如何测试两个不同变量之间的相关性?

【问题讨论】:

  • 您正在使用哪些模块,请将其包含在您的问题中并将其作为标签
  • 嗨@Hippolippo,我根据你的 cmets 编辑了我的问题
  • 在这里检查我的答案,我相信它或多或少是您正在寻找的。以前,您应该将列合并到一个数据框中:stackoverflow.com/questions/60116042/…
  • 您在寻找什么类型的关联?整个系列,还是每小时?
  • 您无法进行每小时关联,因为您每小时只有 1 个值。从数学的角度来看,不可能做出每小时的相关性,你会得到所有的 NaN

标签: python pandas dataframe


【解决方案1】:

由于您的数据框有多个列,因此您需要指定要使用的列的名称:

df1['BSL'].corr(df2['Number of Accident'], "pearson")

【讨论】:

    【解决方案2】:

    pandas 数据帧的corr() 方法计算一个数据帧中所有列的相关矩阵。您有两个数据框,因此该方法不起作用。您可以通过以下方式解决此问题:

    df1['number'] = df2['Number of Accident']
    df1.corr("pearson")
    

    【讨论】:

    • 谢谢,但它没有给出每小时的相关性
    • 我根据您提供的数据解决了可以解决的部分。
    【解决方案3】:
    from scipy.stats import pearsonr
    df_full = df1.merge(df2,how='left')
    full_correlation = pearsonr(df_full['BSL'],df_full['Accidents'])
    print('Correlation coefficient:',full_correlation[0])
    print('P-value:',full_correlation[1])
    

    输出:

    (-0.2934597230564072, 0.3811116115819819)
    Correlation coefficient: -0.2934597230564072
    P-value: 0.3811116115819819
    

    编辑:

    您想要每小时的相关性,但在数学上这是不可能的,因为您每小时只有 1 个 x-y 值。因此,输出将充满 NaN。这是代码,但是输出无效:

    df_corr = df_full.groupby('Datetime')['BSL','Accidents'].corr().drop(columns='BSL').drop('Accidents',level=1).rename(columns={'Accidents':'Correlation'})
    print(df_corr)
    

    输出:

                  Correlation
    Datetime                 
    7        BSL          NaN
    8        BSL          NaN
    9        BSL          NaN
    10       BSL          NaN
    11       BSL          NaN
    12       BSL          NaN
    13       BSL          NaN
    14       BSL          NaN
    15       BSL          NaN
    16       BSL          NaN
    17       BSL          NaN
    

    【讨论】:

    • 谢谢,但我正在寻找基于我之前问过的这个问题的每小时相关性stackoverflow.com/questions/60182894/… 你能看看那个问题吗,这是我真正要实现的目标
    • 你有那个。您应该修复您的数据,因为它并不代表您真正要求的内容。我会尝试在你的另一个问题中解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 2014-03-22
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 2020-02-08
    • 2022-08-11
    • 2020-01-04
    • 1970-01-01
    相关资源
    最近更新 更多