Python 以值列表作为条件屏蔽数据帧

Python 以值列表作为条件屏蔽数据帧,python,pandas,Python,Pandas,我的数据帧包含多个时间序列,每当每个时间序列中的一个点超出平均值一个标准偏差时,我都要进行标记 df = pd.DataFrame(np.random.rand(3, 10), index=['ts_A', 'ts_B','ts_C']) std = df.std(axis=1) mean = df.mean(axis=1) 然后我希望能够做到: df.mask(df > (std + mean), 'True', inplace=True) 它应返回原始数据帧,其中任何超过该行/时

我的数据帧包含多个时间序列,每当每个时间序列中的一个点超出平均值一个标准偏差时,我都要进行标记

df = pd.DataFrame(np.random.rand(3, 10), index=['ts_A', 'ts_B','ts_C'])

std = df.std(axis=1)
mean = df.mean(axis=1)
然后我希望能够做到:

df.mask(df > (std + mean), 'True', inplace=True)
它应返回原始数据帧,其中任何超过该行/时间序列平均值一个标准偏差的值均替换为True

但是,对于每个元素,它都返回false。如果我使用df.where,那么整个数据帧将被True填充


我可以通过迭代索引并依次屏蔽每一行来实现这一点,但我确信一定有更好的方法。

使用
gt
axis=0

df.mask(df.gt(std + mean,axis=0), 'True', inplace=True)
df
             0         1         2         3          4         5         6 
ts_A  0.003797  0.060297  0.265496  0.442663       True  0.498443  0.436738   
ts_B  0.127535  0.644332      True  0.079317  0.0411021      True  0.830672   
ts_C  0.693698  0.429689  0.371802  0.312407  0.0555868      True      True   
             7         8         9  
ts_A  0.403529  0.392445  0.238355  
ts_B  0.732539  0.030451  0.895976  
ts_C  0.907143  0.912002  0.098821 
如果需要,返回T和F

TorF=df.gt(std + mean,axis=0)
TorF
Out[31]: 
          0      1      2      3      4      5      6      7      8      9
ts_A  False  False  False  False   True  False  False  False  False  False
ts_B  False  False   True  False  False   True  False  False  False  False
ts_C  False  False  False  False  False   True   True  False  False  False

使用轴为0的
gt

df.mask(df.gt(std + mean,axis=0), 'True', inplace=True)
df
             0         1         2         3          4         5         6 
ts_A  0.003797  0.060297  0.265496  0.442663       True  0.498443  0.436738   
ts_B  0.127535  0.644332      True  0.079317  0.0411021      True  0.830672   
ts_C  0.693698  0.429689  0.371802  0.312407  0.0555868      True      True   
             7         8         9  
ts_A  0.403529  0.392445  0.238355  
ts_B  0.732539  0.030451  0.895976  
ts_C  0.907143  0.912002  0.098821 
如果需要,返回T和F

TorF=df.gt(std + mean,axis=0)
TorF
Out[31]: 
          0      1      2      3      4      5      6      7      8      9
ts_A  False  False  False  False   True  False  False  False  False  False
ts_B  False  False   True  False  False   True  False  False  False  False
ts_C  False  False  False  False  False   True   True  False  False  False