2016-08-13 5 views
0

私はPandasのDataframeに約78%の欠損値を持つ列を持っています。Pandasの他の値の比率で欠損値を記入

残りの22%値は、3つのラベル(SC、ST、GEN)に以下の比率で分けられます。

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

Iは、全ての要素の比率は上記と同じままであるように、上記の3つの値によって欠損値を交換する必要があります。比率は上記のままである限り、割り当てはランダムにすることができます。

どうすればよいですか?

答えて

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 

次のようにnp.random.choiceでfillnaを使用できます。

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 
関連する問題