如何判断Python DataFrame中两列是否为重命名的同一特征?
判断DataFrame两列是否互为冗余(完全相互决定)
要验证Animal_Common_Name和Animal_Scientific_Name是否完全相互决定(即一列可完全由另一列推导,互为冗余),可以通过双向验证一一对应关系来实现,下面是具体方法和自定义函数:
核心逻辑
两列完全相互决定需要同时满足两个条件:
- 每个俗名对应唯一的学名
- 每个学名对应唯一的俗名
自定义实现函数
你可以自己写一个轻量函数来完成判断:
def check_one_to_one_mapping(df, col_a, col_b): # 检查col_a的每个值是否仅对应唯一的col_b值 a_to_b_unique = df.groupby(col_a)[col_b].nunique().max() == 1 # 检查col_b的每个值是否仅对应唯一的col_a值 b_to_a_unique = df.groupby(col_b)[col_a].nunique().max() == 1 return a_to_b_unique and b_to_a_unique
使用示例
假设你的DataFrame名为zoo_df,直接调用函数即可:
is_redundant = check_one_to_one_mapping(zoo_df, 'Animal_Common_Name', 'Animal_Scientific_Name')
如果返回True,说明两列完全相互决定,其中一列属于冗余特征;返回False则说明存在一对多或多对一的映射关系,两列并非完全冗余。
注意事项
- 如果数据存在缺失值(NaN),建议先通过
df.dropna(subset=[col_a, col_b])过滤缺失行,避免缺失值干扰判断结果。 - 该方法适用于大型DataFrame,groupby和nunique操作在Pandas中经过优化,处理大数据量效率较高。
内容的提问来源于stack exchange,提问作者Floralys
相关产品推荐
相关产品推荐

