state death_rate avg_speed
AL 50 43.08966565
AL 42 12.16736296
AL 52 43.33464079
CA 28 36.88461538
CA 30 48.74048562
CA 28 27.54417671
CA 26 23.10909091
FL 18 58.58169492
FL 86 43.55456453
AL 95 66.83672039
AL 99 30.63928113
FL 98 25.06262626
result = df.groupby('state').corr()
avg_speed death_rate
state
AL avg_speed 1.000000 0.482542
death_rate 0.482542 1.000000
CA avg_speed 1.000000 0.922646
death_rate 0.922646 1.000000
FL avg_speed 1.000000 -0.903176
death_rate -0.903176 1.000000
然后我们重置索引并拉出state和其他列之一(另一列只包含重复的信息,因为您只处理2个变量):
result = result.reset_index()[['state', 'avg_speed']]
state avg_speed
0 AL 1.000000
1 AL 0.482542
2 CA 1.000000
3 CA 0.922646
4 FL 1.000000
5 FL -0.903176
最后,删除相关性为1的行,并选择将该列重命名为更合理的名称:
result = result[~result['avg_speed'].eq(1)].rename(columns={'avg_speed': 'corr'})
这会给你:
state corr
1 AL 0.482542
3 CA 0.922646
5 FL -0.903176
这里有几个不同的问题。。。在
您提供的数据示例不允许计算每个状态的相关性,因为每个状态只有1行。所以我稍微修改了一下您的数据示例,这样下面的示例就可以工作了。我假设在你的实际数据文件中,每个状态有多行。以下是我的工作:
正如一些注释中提到的,您不应该使用
header=None
,因为您的数据文件确实包含一个标题行。此外,您需要导入所有列,而不是仅将其限制为2列,因此应该省略usecols=[1,2]
您的输入数据似乎是用空格分隔的,因此您需要使用
^{pr2}$delim_whitespace
来正确导入它。这将使您能够正确地将数据导入到数据帧中要分别计算每个状态的
death_rate
和avg_speed
之间的相关性,需要在使用corr()
之前使用groupby
。而且,corr()
会给你一个相关矩阵,但是我猜你只需要每个状态的一个相关值。我们可以通过在计算相关矩阵后整理数据帧来得到这个结果首先,我们按
state
分组并计算相关矩阵:然后我们重置索引并拉出state和其他列之一(另一列只包含重复的信息,因为您只处理2个变量):
最后,删除相关性为
1
的行,并选择将该列重命名为更合理的名称:这会给你:
@本吉说得不错。根据您的示例数据,实际上有几个问题:
header
不应设置为None
,因为您确实有一个标头sep
或{\t
),但都没有用。在您可以尝试打印
dataset
或致电dataset.columns
检查是否正确阅读了该文件。在相关问题 更多 >
编程相关推荐