为了账号安全,请及时绑定邮箱和手机立即绑定

如何在python中测试两组之间的相关性?

如何在python中测试两组之间的相关性?

慕村225694 2022-07-26 16:24:39
我有两个不同的数据框,其中一个如下df1=      Datetime      BSL0          7  127.5045051          8  115.2541322          9  108.9942753         10  102.9368604         11   99.8304005         12  114.6605226         13  138.2153397         14  132.1310758         15  121.4780069         16  113.79564510        17  114.038462另一个是 df2=    Datetime       Number of Accident0          7                  34551          8                 173882          9                 277673         10                 336224         11                 334745         12                 126706         13                 281377         14                 271418         15                 265159         16                 2484910        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().我该如何解决?或者,我如何测试两个不同变量之间的相关性?
查看完整描述

3 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

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 个 xy 值。因此,输出将充满 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


查看完整回答
反对 回复 2022-07-26
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

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

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


查看完整回答
反对 回复 2022-07-26
?
POPMUISE

TA贡献1765条经验 获得超5个赞

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


df1['number'] = df2['Number of Accident']

df1.corr("pearson")


查看完整回答
反对 回复 2022-07-26
  • 3 回答
  • 0 关注
  • 217 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号