我需要获得两个数据帧列之间的相关性。它们都有相同的列但由于对齐可能无关联。
我并不十分关心数据框的索引,我只想关联单元格中的值,将每列视为随机分布。
我不确定这是不是我的熊猫或我的数学技能,但在这种情况下,我不知道对齐的目的是什么。
这是我的代码:
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。
以下是我想要做的事情(每列):
X是来自细胞的值,mi和sigma是平均值和标准差。开发。专栏。
答案 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