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