python - Pandas - 根据值删除单元格

标签 python pandas dataframe

我有一个包含多个值的 z 分数的数据框。它看起来像这样:

ID    Cat1     Cat2     Cat3
A     1.05     -1.67    0.94
B     -0.88    0.22     -0.56
C     1.33     0.84     1.19

我想编写一个脚本,告诉我哪些 ID 与每个类别中相对于我根据需要指定的截止值的值相对应。因为我正在使用 z 分数,所以我需要将绝对值与我的截止值进行比较。

因此,如果我将截止值设置为 0.75,则生成的数据帧将是:

Cat1    Cat2    Cat3
A       A       A
B       C       C
C

如果我将 1.0 设置为截止值:上面的数据框将返回:

Cat1    Cat2    Cat3
A       A       C
C

我知道我可以执行这样的查询:

df1 = df[df['Cat1'] > 1]
df1
df1 = df[df['Cat1'] < -1]
df1

单独查询每一列并找到我正在寻找的信息,但这很乏味,即使我弄清楚如何使用abs函数将两个查询合并为一个。如何将这种过滤应用于整个数据帧?

我已经想出了这个脚本的框架:

cut_off = 1.0
cols = list(df.columns)
cols.remove('ID')
for col in cols:
    # FOR CELL IN VALUE OF EACH CELL IN COLUMN:
        if (abs.CELL < cut_off):
            CELL = NaN

基本上只是消除任何不符合截止值的值。如果我能让这个发挥作用,它会让我更接近我的目标,但我陷入困境,甚至不知道我是否走在正确的轨道上。同样,总体目标是快速找出每个类别中哪些单元格的绝对值高于截止值,以便能够列出相应的 ID。

如果有任何令人困惑或模糊的内容,我深表歉意;请在评论中告诉我,我会修复它。今天大部分时间我都在试图解决这个问题,但我的大脑有些困惑

最佳答案

您不必对列应用过滤,您也可以这样做

df[df > 1]

,还有,

df[df > 1] = np.NaN

关于python - Pandas - 根据值删除单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25126520/

相关文章:

python - 如何在数据帧上一项一项地迭代?

python - Flask-WTF 表单的单元测试验证

python - UnicodeDecodeError 读取 CSV 中的字符串

python - 用 Pandas 应用滚动自定义功能

python - 使用 for 循环遍历列表时从 csv 文件中提取值

python - Pandas Dataframe 检查交集并填写新的 dataframe

python - 降级到以前版本的 Spyder

python - openCV中的Mac警报弹出窗口

python - Dask "Column Assignment Doesn' t 支持时间戳”

python - Pandas 'DataFrame' 对象没有属性 'map'