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

如何删除pandas DataFrame中方差低于阈值的行?

过滤行方差低于阈值的DataFrame行

没问题,这个需求用Pandas其实很容易实现,只是你之前可能没留意到var()方法可以指定按行计算!我给你一步步演示:

首先先还原你的示例DataFrame:

import pandas as pd

data = {
    'ID_column': ['ID1', 'ID2', 'ID3'],
    'Test1': [0, 4, 3],
    'Test2': [1, 2, 1],
    'Test3': [3, 0, 3],
    'Test4': [0, 0, 5]
}
df = pd.DataFrame(data).set_index('ID_column')

此时你的DataFrame结构如下:

ID_columnTest1Test2Test3Test4
ID10130
ID24200
ID33135

接下来是核心操作,分三步完成行过滤:

  1. 按行计算方差:用df.var(axis=1),这里的axis=1是关键——默认axis=0是按列计算,指定axis=1就会切换为按行统计。
  2. 设置阈值:定义你要的阈值x,比如假设x=2。
  3. 布尔索引过滤:保留方差大于等于阈值的行,或者直接删除低于阈值的行。

具体代码示例:

# 设置你的阈值x
x = 2

# 计算每行的样本方差(默认自由度为n-1)
row_variances = df.var(axis=1)

# 过滤:只保留方差 >= x 的行
filtered_df = df[row_variances >= x]

运行后filtered_df的结果为:

ID_columnTest1Test2Test3Test4
ID10130
ID24200
ID33135

(注:ID1的行方差刚好等于2,所以被保留;如果把阈值设为x=2.1,ID1就会被过滤掉)

如果你的DataFrame里混有非数值列(比如ID_column没设为索引的情况),记得先筛选数值列再计算方差,避免报错:

# 仅对数值型列计算行方差
row_variances = df.select_dtypes(include=['int64', 'float64']).var(axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:20:46