You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用不符合中位数条件的列值列表删除对应行?

如何移除DataFrame中指定列计数低于中位数的行?

现有Python函数remove_low_data_states可返回DataFrame指定列中计数低于中位数的值列表(示例返回['hello','bye']),目标是移除这些值对应的行,尝试使用pd.drop方法未达预期,求正确实现方式。

原函数代码:

def remove_low_data_states(column_name):
    items = df[column_name].value_counts().reset_index()
    items.columns = ['place', 'value']
    print(f'Items in column: [{column_name}] with low data')
    return list(items[items['value'].apply(lambda val: val < items.value.median())].place)

# 调用示例
remove_low_data_states('col1')  # 返回 ['hello', 'bye']

原表格

col1col2col3
hello24
world24
bye24

预期更新后表格

col1col2col3
world24

正确实现方法

方法1:布尔索引过滤(最直接)

先获取需要移除的低计数值列表,再用isin()结合取反操作筛选保留的行:

# 获取低数据值列表
low_values = remove_low_data_states('col1')
# 过滤出不包含这些值的行
filtered_df = df[~df['col1'].isin(low_values)]

方法2:用pd.drop实现(补全正确用法)

如果一定要用pd.drop,需要先定位到要删除行的索引,再传入drop方法:

low_values = remove_low_data_states('col1')
# 获取要删除的行索引
drop_indices = df[df['col1'].isin(low_values)].index
# 删除对应行
filtered_df = df.drop(index=drop_indices)

说明

pd.drop默认需要传入行索引或列名,直接传值列表是无效的,所以之前用drop没成功大概率是因为没正确获取目标行的索引。而布尔索引的方式更简洁直观,适合这类按值过滤的场景。

内容的提问来源于stack exchange,提问作者FalloutATS21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 06:35:19