能否用Pandas的value_counts替代groupby+filter筛选指定行?
当然可以用
value_counts()实现相同需求 这里提供两种简洁的实现方式:
方法一:结合isin()筛选
先通过value_counts()找出b列中出现次数≥2的值,再用isin()过滤原DataFrame:
# 提取b列中出现次数超过1次的取值 valid_b_values = df['b'].value_counts()[df['b'].value_counts() > 1].index # 过滤出符合条件的行 filtered_df = df[df['b'].isin(valid_b_values)]
方法二:用map()映射计数后过滤
直接将每个b值的出现次数映射到对应行,再筛选计数大于1的行:
# 生成b列各值的计数映射表 b_count_map = df['b'].value_counts() # 映射计数并过滤 filtered_df = df[df['b'].map(b_count_map) > 1]
两种方法都能得到和df.groupby(by=['b']).filter(lambda b: len(b) > 1)完全一致的结果——保留b列值为x、z的所有行,剔除b为y的行。
内容的提问来源于stack exchange,提问作者Filippo Vitale
相关产品推荐
相关产品推荐

