Pandas - 根据值移除单元格

1 投票
1 回答
5326 浏览
提问于 2025-04-18 15:58

我有一个数据表,里面有几个值的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

逐个查询每一列,找到我想要的信息,但这样做太麻烦了,即使我弄明白了如何使用绝对值函数把两个查询合并成一个。我该如何将这个筛选应用到整个数据表呢?

我想出了一个脚本的框架:

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。

如果有什么地方让你感到困惑或模糊,请在评论中告诉我,我会修正的。我今天大部分时间都在试图弄明白这个问题,我的脑袋有点疲惫。

1 个回答

2

你不一定要把过滤条件应用到列上,你也可以这样做:

df[df > 1]

而且,你还可以这样:

df[df > 1] = np.NaN

撰写回答