Создайте индикаторную переменную в Python, используя пороговое значение, оставив NaN как NaN - PullRequest
1 голос
/ 05 мая 2020

У меня есть данные с плавающей точкой от зонда проводимости, который содержит несколько NaN. Я хотел бы преобразовать данные зонда в индикаторную переменную на основе эмпирического порогового значения, но я хочу, чтобы значения NaN оставались NaN. Преобразование в индикатор кажется простым, но проблема связана с обработкой нан. Вот пример с пороговым значением 50:

import numpy as np
import pandas as pd

x = [0, np.nan, 2, 3, 4, 51, 61, 71, 81, 91]
df = pd.DataFrame({"x":x})
df['indicator'] = (df.x <=50)*1

Урожайность:

      x  indicator
0   0.0          1
1   NaN          0
2   2.0          1
3   3.0          1
4   4.0          1
5  51.0          0
6  61.0          0
7  71.0          0
8  81.0          0
9  91.0          0

Но я хочу, чтобы индикатор nan был таким:

      x  indicator
0   0.0          1
1   NaN        NaN  
2   2.0          1
3   3.0          1
4   4.0          1
5  51.0          0
6  61.0          0
7  71.0          0
8  81.0          0
9  91.0          0

Любая помощь приветствуется. Спасибо.

Ответы [ 3 ]

2 голосов
/ 05 мая 2020

Вы можете попробовать следующее:

import numpy as np
import pandas as pd

x = [0, np.nan, 2, 3, 4, 51, 61, 71, 81, 91]
df = pd.DataFrame({"x":x})
df['indicator'] = df.x*(df.x <=50)

Вывод:

      x  indicator
0   0.0        0.0
1   NaN        NaN
2   2.0        2.0
3   3.0        3.0
4   4.0        4.0
5  51.0        0.0
6  61.0        0.0
7  71.0        0.0
8  81.0        0.0
9  91.0        0.0

Для точного вывода:

mport numpy as np
import pandas as pd

x = [0, np.nan, 2, 3, 4, 51, 61, 71, 81, 91]
df = pd.DataFrame({"x":x})
df['indicator'] = np.where(df.x.isnull(), np.nan, df.x < 50)

Вывод:

      x  indicator
0   0.0        1.0
1   NaN        NaN
2   2.0        1.0
3   3.0        1.0
4   4.0        1.0
5  51.0        0.0
6  61.0        0.0
7  71.0        0.0
8  81.0        0.0
9  91.0        0.0
1 голос
/ 05 мая 2020

Думал, что пытаюсь применить лямбду к столбцу :)

x = [0, np.nan, 2, 3, 4, 51, 61, 71, 81, 91]
df = pd.DataFrame({"x":x})
indicator = lambda x: np.nan if (np.isnan(x)) else (x<=50)*1 
df['indicator'] = df['x'].apply(indicator)
print(df)

печатает:

      x  indicator
0   0.0        1.0
1   NaN        NaN
2   2.0        1.0
3   3.0        1.0
4   4.0        1.0
5  51.0        0.0
6  61.0        0.0
7  71.0        0.0
8  81.0        0.0
9  91.0        0.0
1 голос
/ 05 мая 2020

IIU C:

In [1829]: df['indicator'] = df[df.x <=50]*1                                                                                                                                                                

Индикатор будет установлен только для строк, где x <= 50: </h3> In [1830]: df Out[1830]: x indicator 0 0.0 0.0 1 NaN NaN 2 2.0 2.0 3 3.0 3.0 4 4.0 4.0 5 51.0 NaN 6 61.0 NaN 7 71.0 NaN 8 81.0 NaN 9 91.0 NaN

...