Маска DataFrame со списком значений как условие - PullRequest
0 голосов
/ 10 октября 2018

Мой 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 голосов
/ 10 октября 2018

Использование 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...