如何基于Pandas Multi-Index层级间条件过滤Pandas Series?——以鸢尾花数据集Column Correlation计算结果为例
解决Pandas Multi-Index Series的层级条件过滤问题
针对你提到的过滤掉特征与自身相关性的需求,这里有两种通用的方法来处理Pandas的Multi-Index Series:
方法一:利用get_level_values比较层级值
这是最直接的方式,通过获取Multi-Index中两个层级的值,筛选出两者不相等的条目:
from sklearn.datasets import load_iris import pandas as pd # 加载数据并生成相关系数的Multi-Index Series data = load_iris() df = pd.DataFrame(data.data, columns=data.feature_names) corr_series = df.corr().unstack() # 过滤掉自身相关的行 filtered_corr = corr_series[corr_series.index.get_level_values(0) != corr_series.index.get_level_values(1)]
get_level_values(0)会提取Multi-Index的第一个层级(比如每个元组里的第一个特征名),get_level_values(1)提取第二个层级,通过!=判断就能排除掉特征和自身配对的行。
方法二:用map遍历索引元组
如果觉得层级索引的编号不够直观,也可以直接遍历每个索引元组,判断两个元素是否不同:
filtered_corr = corr_series[lambda x: x.index.map(lambda idx: idx[0] != idx[1])]
这里的idx就是Multi-Index中的每个元组(比如('sepal length (cm)', 'sepal width (cm)')),直接对比元组的两个元素就能完成筛选,逻辑更易懂。
额外扩展:去除重复配对(可选)
如果你的场景中不需要保留(A,B)和(B,A)这种重复的相关系数对,可以进一步用字符串比较来筛选唯一配对:
filtered_unique_corr = corr_series[corr_series.index.get_level_values(0) < corr_series.index.get_level_values(1)]
这样只会保留第一个特征名字符串小于第二个的配对,避免重复计算。
内容的提问来源于stack exchange,提问作者Newbi-Boy
相关产品推荐
相关产品推荐

