gpt4 book ai didi

pandas - 了解pandas.DataFrame.corrwith方法进行按列和按行的spearman排名相关计算

转载 作者:行者123 更新时间:2023-12-02 12:52:14 34 4
gpt4 key购买 nike

我有两个像这样的数据框:

preds_df = pd.DataFrame.from_records ([[ 0.8224],  [ 0.7982]]) 
tgts_df = pd.DataFrame.from_records ([[0.8889], [1.0000]])

并且想要计算跨列和跨行的斯 PIL 曼排名相关值:

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 ,因为每个row 恰好包含一列,并且 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 即使每一列的其中一列(第三列)具有在 col_wise 中生成了 nan

问题3:一般来说,为什么会得到nan值?我的输入数据帧中都有实数。

最佳答案

问题 1:请注意,当您想要按行计算 Spearman 相关系数时,您会从两个帧 (0.8224, 0.8889) 中获得两个单元素样本,对应于系数列表中的第一个元素和 (0.7982,1.0000) 对应另一个。现在看formula为系数。由于您在两个样本中都有一个观察结果,因此分母等于 0,这就是您获得 NaN 值的原因。

问题 2 和 3:上述问题不适用于您的第二个示例,但您在 tgts_df 的最后一列中观察到具有相同值 (0.0) 的结果,这导致了所谓的并列排名(参见more here)。通常在三种情况下您会获得 NaN 值:

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

2.数据中存在联系(具有相同值的观测值)。

3.两个dataframe对象的形状不相同。

如果您还有任何其他问题,请随时在 CrossValidated 上提问。 .

关于pandas - 了解pandas.DataFrame.corrwith方法进行按列和按行的spearman排名相关计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59448190/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com