Как я могу создать категорию пропущенных значений, когда я веду переменную континуума? - PullRequest
2 голосов
/ 29 сентября 2019

У меня есть непрерывная переменная 'nro_repro', которая имеет 40 NaN, я хочу сгруппировать ее в три диапазона: (-inf; 0), (0: ​​+ inf) и MISSING.

Когда я делаю группировку в varaible, она не показывает мне третью категорию (пропущенные значения)

Как мне сделать сувенир этой проблемы?

С уважением, Хьюго

train_sm1['nro_repro'].isnull().sum()
Out[21]: 40

bin = [-np.inf,0,np.inf]
category = pd.cut(train_sm1['nro_repro'],bin)
category = category.to_frame()
category.columns = ['R_nro_repro']
train_sm1 = pd.concat([train_sm1,category],axis = 1)
pd.crosstab(train_sm1['R_nro_repro'],columns='count')

col_0        count
R_nro_repro       
(-inf, 0.0]  62885
(0.0, inf]    6173

Ответы [ 2 ]

0 голосов
/ 29 сентября 2019

Также можно отфильтровать отфильтрованные строки и добавить недостающие в оставшиеся строки

arr = np.random.randn(10)
arr[np.random.choice(len(arr), 3)] = np.nan
df = pd.DataFrame({"A": arr})


## solution
df["category"] = "Missing"
bins = [-np.inf,0,np.inf]
df.loc[~df["A"].isnull(), "category"] = pd.cut(df["A"].loc[~df["A"].isnull()], bins=bins)

df
0 голосов
/ 29 сентября 2019

Я упрощаю ваше решение с помощью присваивания столбцу train_sm1['R_nro_repro'] и для замены неправильных значений на Missing необходимо cat.add_categories, потому что работа с категориями с Series.fillna:

train_sm1 = pd.DataFrame({'nro_repro':[-2, np.nan, 5, np.nan]})
bin = [-np.inf,0,np.inf]
train_sm1['R_nro_repro'] = pd.cut(train_sm1['nro_repro'],bin)
train_sm1['R_nro_repro'] = (train_sm1['R_nro_repro'].cat.add_categories(['Missing'])
                                                    .fillna('Missing'))
print(train_sm1)
   nro_repro  R_nro_repro
0       -2.0  (-inf, 0.0]
1        NaN      Missing
2        5.0   (0.0, inf]
3        NaN      Missing

print(train_sm1['R_nro_repro'].value_counts())

Missing        2
(0.0, inf]     1
(-inf, 0.0]    1
Name: R_nro_repro, dtype: int64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...