多列数据对比:统计label-features实例及移除重复行的方案咨询
可行实现思路
1. 先移除完全重复行
直接基于label和所有features列(F1、F2、F3、F4...)做去重,保留任意一行即可,快速清理两类属性完全相同的重复数据。
用Python pandas的实现代码:
import pandas as pd # 假设数据存储在DataFrame df中,列包含label、F1、F2、F3、F4等 # 去重,保留首次出现的行 df_dedup = df.drop_duplicates(subset=['label', 'F1', 'F2', 'F3', 'F4'], keep='first')
2. 统计两类目标实例数量
(1)label不变但features变化的实例
核心逻辑:按label分组,找出同一label下对应多种features组合的实例,统计这类实例的总数:
# 给每条数据生成features组合的唯一标识(用字符串拼接或哈希值均可) df_dedup['feature_key'] = df_dedup.apply(lambda row: '_'.join([str(row[col]) for col in ['F1', 'F2', 'F3', 'F4']]), axis=1) # 按label分组,统计每个label下的features组合数量 label_feature_counts = df_dedup.groupby('label')['feature_key'].nunique() # 筛选出存在多种features组合的label target_labels = label_feature_counts[label_feature_counts > 1].index # 统计这类实例的总数 count_label_same_feature_diff = df_dedup[df_dedup['label'].isin(target_labels)].shape[0]
(2)features不变但label变化的实例
核心逻辑:按features组合分组,找出同一features组合下对应多种label的实例,统计总数:
# 按features组合分组,统计每个组合下的label数量 feature_label_counts = df_dedup.groupby('feature_key')['label'].nunique() # 筛选出存在多种label的features组合 target_features = feature_label_counts[feature_label_counts > 1].index # 统计这类实例的总数 count_feature_same_label_diff = df_dedup[df_dedup['feature_key'].isin(target_features)].shape[0]
效率优化提示
- 若数据量极大(千万级以上),用
hash()生成features的哈希值替代字符串拼接,可大幅降低内存占用 - 也可通过SQL实现相同逻辑:先执行去重,再分组统计,最后筛选计数,适合存储在数据库中的大表
内容的提问来源于stack exchange,提问作者Brie MerryWeather
相关产品推荐
相关产品推荐

