我有一个包含多个值的 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/