首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >理解spearman秩相关计算的pandas.DataFrame.corrwith方法列和行

理解spearman秩相关计算的pandas.DataFrame.corrwith方法列和行
EN

Stack Overflow用户
提问于 2019-12-22 21:33:53
回答 1查看 403关注 0票数 3

我有两个这样的数据处理程序:

代码语言:javascript
运行
复制
preds_df = pd.DataFrame.from_records ([[ 0.8224],  [ 0.7982]]) 
tgts_df = pd.DataFrame.from_records ([[0.8889], [1.0000]])

并希望计算跨列和跨行的spearman秩相关值:

代码语言:javascript
运行
复制
col_wise = preds_df.corrwith(tgts_df,method='spearman',axis=0).values.tolist()
row_wise = preds_df.corrwith(tgts_df,method='spearman',axis=1).values.tolist()

打印这些值将:

代码语言:javascript
运行
复制
print(col_wise)
[-0.9999999999999999]
print(row_wise)
[nan, nan]

问题1: col_wise产生了一些结果,但是为什么row_wise会为每一行生成nan,因为每一行都包含一个列,而为col_wise获得的值不是nan

如果我进一步扩展这些数据集(保留原来的列,但再添加两个列),那么

代码语言:javascript
运行
复制
preds_df = pd.DataFrame.from_records ([[0.8224,  0.5371,  0.1009],  [0.7982,  0.5890,  0.0962]])
tgts_df = pd.DataFrame.from_records ([[0.8889, 0.5556, 0.0000], [1.0000, 0.7778, 0.0000]])

所获得的数值如下:

代码语言:javascript
运行
复制
col_wise = preds_df.corrwith(tgts_df,method='spearman',axis=0).values.tolist()
print(col_wise)
[-0.9999999999999999, 0.9999999999999999, nan]

row_wise = preds_df.corrwith(tgts_df,method='spearman',axis=1).values.tolist()
print(row_wise)
[1.0, 1.0]

问题2:为什么row_wise不包含nan,即使每个行生成的列之一(第三列)在col_wise中生成了nan

问题3:一般情况下,,为什么得到nan值?我输入的数据都有实数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-22 22:37:14

问题1:注意,当您想按行计算Spearman相关系数时,您从两个框架(0.8224, 0.8889)中得到两个一个元素样本,它们对应于系数列表中的第一个元素,和(0.7982,1.0000)对应的另一个元素。现在看看系数的公式。因为两个样本中都有一个观测值,所以分母等于零,这就是为什么得到NaN值的原因。

问题2和3:上述问题不适用于您的第二个示例,但是在tgts_df的最后一栏中有相同值(0.0)的观察结果,这会导致所谓的平分级别(参见更多在这里)。在获得NaN值时,通常有三种情况:

1.每个组中只有一个元素的样本。

2.在数据中有联系(观察值相同)。

3.两个数据对象的形状不一样。

如果您有任何进一步的问题/问题,欢迎在CrossValidated上提问。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59448190

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档