2016-08-13 6 views
0

У меня есть столбец в Dataframe в Pandas с около 78% пропущенных значений.Заполнять Отсутствует Значения по отношению к другим значениям в Pandas

Остальные значения 22% разделены на три метки - SC, ST, GEN со следующими коэффициентами.

SC - 16% ST - 8% GEN - 76%

мне нужно заменить отсутствующие значения с помощью указанных выше трех значений, так что отношение всех элементов остается таким же, как указано выше. Назначение может быть случайным, поскольку соотношение остается таким же, как указано выше.

Как это сделать?

ответ

1

Начиная с этого DataFrame (только, чтобы создать что-то похожее на вас):

import numpy as np 
df = pd.DataFrame({'C1': np.random.choice(['SC', 'ST', 'GEN'], p=[0.16, 0.08, 0.76], 
              size=1000)}) 
df.loc[df.sample(frac=0.22).index] = np.nan 

Это дает колонку с 22% NaN, а остальные пропорции похожи на ваши:

df['C1'].value_counts(normalize=True, dropna=False) 
Out: 
GEN 0.583 
NaN 0.220 
SC  0.132 
ST  0.065 
Name: C1, dtype: float64 

df['C1'].value_counts(normalize=True) 
Out: 
GEN 0.747436 
SC  0.169231 
ST  0.083333 
Name: C1, dtype: float64 

сейчас вы можете использовать fillna с np.random.choice:

df['C1'] = df['C1'].fillna(pd.Series(np.random.choice(['SC', 'ST', 'GEN'], 
                 p=[0.16, 0.08, 0.76], size=len(df)))) 

В результате столбец будет е эти пропорции:

df['C1'].value_counts(normalize=True, dropna=False) 
Out: 
GEN 0.748 
SC  0.165 
ST  0.087 
Name: C1, dtype: float64