2016-08-13 58 views
0

我在熊貓的數據框中有一列,大約有78%的缺失值。在熊貓中填充缺失值的比例

剩餘的22%值被分爲三個標籤 - SC,ST,GEN和以下比率。

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

我需要由上述三個值,以替換丟失的值,使得所有的元素的比率保持與上面相同。只要比例如上所述,分配可以是隨機的。

我該如何做到這一點?

回答

1

這個數據幀開始(僅創造與你相似的東西):

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 

現在你可以使用filln與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)))) 

由此產生的列將hav e這些比例:

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