Pandas - 没有对齐的两个数据帧之间的相关性

时间:2018-03-29 01:58:51

标签: python pandas dataframe correlation

我需要获得两个数据帧列之间的相关性。它们都有相同的列但由于对齐可能无关联。

我并不十分关心数据框的索引,我只想关联单元格中的值,将每列视为随机分布。

我不确定这是不是我的熊猫或我的数学技能,但在这种情况下,我不知道对齐的目的是什么。

这是我的代码:

def correlation(indv1, indv2):
    frame1 = pd.DataFrame(indv1).select_dtypes(include=['float64', 'int64']) # Filtra o individuo para ficar apenas com valores int ou float
    frame2 = pd.DataFrame(indv2).select_dtypes(include=['float64', 'int64'])
    result = frame1.corrwith(frame2)
    return result.sum()

以下是我尝试的内容:

  • 将数据框与DataFrame.align对齐,但我不确定如何操作
  • 使用DataFrame.reindex重新索引数据框,但它也会从对齐生成NaN
  • 使用DataFrame.reset_index,但会创建另一个包含旧索引的列

以下是出错的示例:

test1 = pd.Series(np.random.random(3), index=[0, 1, 2])
test2 = pd.Series(np.random.random(3), index=[3, 4, 5])
print(correlation(test1, test2))

如果打印相关函数的结果数组,则显示NaN。

以下是我想要做的事情(每列):

correlation formula

X是来自细胞的值,mi和sigma是平均值和标准差。开发。专栏。

1 个答案:

答案 0 :(得分:2)

你忽略了总和的数学指标。那些是(Xi - muX)(Yi - muY)。它们如何协调一定很重要。

如果您不关心对齐指数但希望关联其现有订单并且您知道长度相同,请尝试相反:

def correlation(indv1, indv2):
    frame1 = pd.DataFrame(indv1).select_dtypes(include=['float64', 'int64']) # Filtra o individuo para ficar apenas com valores int ou float
    frame2 = pd.DataFrame(indv2).select_dtypes(include=['float64', 'int64'])
    # Part I changed                /--------------------\
    result = frame1.corrwith(frame2.set_index(frame1.index))
    return result.sum()

<强>演示

np.random.seed([3, 1415])
test1 = pd.Series(np.random.random(3), index=[0, 1, 2])
test2 = pd.Series(np.random.random(3), index=[3, 4, 5])
print(correlation(test1, test2))

-0.719774418655