您好,我建立了一个相关矩阵,想删除XX下的所有标签和值我正在建立一个系列,因此我可以遍历值,但是我不知道如何删除原始值。下一步是将其转换回数据框。也许您知道更好的方法。
这里有个小例子
import numpy as np
import pandas as pd
data = np.random.rand(4,4)
df = pd.DataFrame(data, index = ['varname1', 'varname2', 'varname3', 'varname4'],
columns = ['longname1', 'longname2', 'longname3', 'longname4'])
corr = abs(df.corr().stack())
corr = corr[corr.index.get_level_values(0) != corr.index.get_level_values(1)] #delete doubles
for i in range(len(corr.keys())):
if corr[i] <= 0.2:
corr = corr.drop(corr[i]) # how can i delete the raws
您可以按&
链接另一个遮罩以按位AND
并按boolean indexing
进行过滤,以重新整形并添加boolean indexing
:
Series.unstack
另一个想法是用Series.unstack
替换缺失值,然后用np.random.seed(2020)
data = np.random.rand(4,4)
df = pd.DataFrame(data, index = ['varname1', 'varname2', 'varname3', 'varname4'],
columns = ['longname1', 'longname2', 'longname3', 'longname4'])
print (df)
longname1 longname2 longname3 longname4
varname1 0.986277 0.873392 0.509746 0.271836
varname2 0.336919 0.216954 0.276477 0.343316
varname3 0.862159 0.156700 0.140887 0.757080
varname4 0.736325 0.355663 0.341093 0.666803
corr = df.corr().stack().abs()
m1 = corr.index.get_level_values(0) != corr.index.get_level_values(1)
m2 = corr > 0.2
corr = corr[m1 & m2].unstack()
print (corr)
longname1 longname2 longname3 longname4
longname1 NaN 0.584300 0.326267 NaN
longname2 0.584300 NaN 0.937580 0.641093
longname3 0.326267 0.937580 NaN 0.720851
longname4 NaN 0.641093 0.720851 NaN
的DataFrame.where
填充对角线值>
DataFrame.where