与多索引串联,如果值为XX,则删除行

问题描述 投票:1回答:1

您好,我建立了一个相关矩阵,想删除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
python pandas
1个回答
2
投票

您可以按&链接另一个遮罩以按位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
© www.soinside.com 2019 - 2024. All rights reserved.