我有两个这样的数据框:
preds_df = pd.DataFrame.from_records ([[ 0.8224], [ 0.7982]])
tgts_df = pd.DataFrame.from_records ([[0.8889], [1.0000]])
,并希望计算跨列和跨行的spearman等级相关值:
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()
打印这些值将给出:
print(col_wise)
[-0.9999999999999999]
print(row_wise)
[nan, nan]
问题1: col_wise
产生了一些结果,但是row_wise
对每一行产生nan
的结果是给定的,因为每一行仅包含一列,并且获得的值col_wise
不是nan
吗?
如果我进一步扩展这些数据集(保留原始列,但再添加两列),这样
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]])
获得的值是:
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
为什么不包含nan
在col_wise
中?
问题3:通常,为什么会获得nan
值?我的输入数据帧中都有实数。
答案 0 :(得分:1)
问题1:
请注意,当您要逐行计算Spearman相关系数时,您会从两个帧(0.8224, 0.8889
)中得到两个单元素样本,它们与系数列表中的第一个元素和(0.7982,1.0000
)相对应对应于另一个。现在来看formula的系数。因为您在两个样本中都有一个观测值,所以分母等于零,这就是为什么获得NaN
值的原因。
问题2和3:
上面的问题不适用于您的第二个示例,但是您在0.0
的最后一列中观察到的值(tgts_df
)相同,这导致所谓的并列秩(请参阅{{3} }。通常,在三种情况下要获取NaN
值:
1。。您的样本中每个组中只有一个元素。
2。。数据中存在联系(观测值相同)。
3。。两个数据框对象的形状不同。
如果您还有其他问题/疑问,请随时在more here上提问。