使用值列表作为条件的掩码DataFrame

时间:2018-10-10 18:06:40

标签: python pandas

我的DataFrame包含多个时间序列,每当时间序列中的某个点超出平均值一个标准偏差时,我都希望进行标记。

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)

应该返回原始DataFrame,其中将比该行/时间序列的平均值高出一个标准偏差以上的任何值替换为True。

但是,相反,它为每个元素返回false。如果我使用df.where,则整个DataFrame都将填充True。

我可以通过遍历索引并依次屏蔽每一行来做到这一点,但是我敢肯定必须有更好的方法。

1 个答案:

答案 0 :(得分:2)

gtaxis=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