python - Python计算组之间单个变量的相关性
问题描述
我想计算面板数据中两组之间变量“小时”的相关性。具体来说,我想计算 A 组和 B 组与 C 组之间的小时数的相关性。因此最终结果将包含两个数字:corr(hours_A, hours_C) 和 corr(hours_B, hours_C)。
我努力了:
data.groupby('group').corr()
但它给了我每组内“小时”和“其他变量”之间的相关性,但我想要两组之间“小时”变量的相关性。我是 Python 新手,所以欢迎任何帮助!
团体 | 年 | 小时 | 其他变量 |
---|---|---|---|
一个 | 2000 | 2784 | 567 |
一个 | 2001年 | 2724 | 567 |
一个 | 2002年 | 2715 | 567 |
乙 | 2000 | 2301 | 567 |
乙 | 2001年 | 2612 | 567 |
乙 | 2002年 | 2489 | 567 |
C | 2000 | 2190 | 567 |
C | 2001年 | 2139 | 567 |
C | 2002年 | 2159 | 567 |
更新:
谢谢你回答我的问题!我最终想出了自己的一些代码,但我的代码并不像提供的答案那么优雅。为了它的价值,我把它贴在这里。
df = df.set_index(['group','year'])
df = df.unstack(level=0)
df.index = pd.to_datetime(df.index).year
df.columns = df.columns.rename(['variables',"group"])
df.xs('hours', level="variables", axis=1).corr()
相关性不需要索引年份,但如果我想稍后创建数据的横截面,它可能会派上用场。
解决方案
您可以将列表应用于组,然后转换为系列,转置,然后对数据调用 corr()。
from io import StringIO
import pandas as pd
>>> data = StringIO("""group,year,hours,other,variables
A,2000,2784,567
A,2001,2724,567
A,2002,2715,567
B,2000,2301,567
B,2001,2612,567
B,2002,2489,567
C,2000,2190,567
C,2001,2139,567
C,2002,2159,567""")
>>> df = pd.read_csv(data)
>>> df.groupby('group')['hours'].apply(list).apply(pd.Series).T.corr()
0 1 2
0 1.000000 0.771752 0.898470
1 0.771752 1.000000 0.972589
2 0.898470 0.972589 1.000000
这是如何运作的?groupby + apply(list) 产生以下内容,这是一个包含三行的系列,每行是三个项目的列表。
A [2784, 2724, 2715]
B [2301, 2612, 2489]
C [2190, 2139, 2159]
apply(pd.Series) 将每行中的列表转换为系列。然后,您必须使用 T 运算符进行转置以在单个列中获取每个组的数据。
0 1 2
group
A 2784 2724 2715
B 2301 2612 2489
C 2190 2139 2159
transposed is
group A B C
0 2784 2301 2190
1 2724 2612 2139
2 2715 2489 2159
如果你只想要这两个值,那就是
>>> df.groupby('group')['hours'].apply(list).apply(pd.Series).T.corr().iloc[1:3,0].values
array([-0.86594029, 0.86783525])
在此示例中,您使用iloc
获取第一列中的第二行和第三行(python 索引从零开始),然后values
a 的属性Series
返回一个数组而不是 a Series
。
推荐阅读
- oauth-2.0 - openID Connect 提供者服务器中的 JWK 管理
- c - OpenMP 运行时看不到我的 GPU 设备
- eclipse - eclipse m2e的全局设置在哪里?
- assembly - 有没有办法在条件跳转(程序集 x86)后返回并运行标签中的剩余代码?
- html - 不能在`中使用吸管` 在 Chrome 扩展程序中
- python - 抓取包含特定文本的脚本标签
- kotlin - 为什么其中一些 kotlin 协程从未启动?
- c++ - 当同样好的转换函数可用时,为什么重载决议更喜欢移动构造函数而不是非特殊构造函数?
- go - 如何在 Go 中运行 .bat 文件
- android - INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION