簡體   English   中英

如何根據其他變量估算缺失值

[英]How to impute missing values based on other variables

我有一個 dataframe 如下所示:

df = pd.DataFrame({'one' : pd.Series(['a', 'b', 'c', 'd','aa','bb',np.nan,'b','c',np.nan, np.nan] ), 
  'two' : pd.Series([10, 20, 30, 40,50,60,10,20,30,40,50])} )

數據框

其中第一列是變量,第二列是值。 變量值是恆定的,永遠不會改變。

例如'a' 的值為 10每當出現 'a' 時,對應的值為 10

這里第一列中缺少一些值,例如:NaN 10 是 a,NaN 40 是明智的 dataframe 包含 200 個變量。

值不是連續變量,它們是離散且不可排序的

在這種情況下,我們如何估算缺失值。 預期的 output 應該是:

預期產出

請幫助我。

問候,文卡特。

我認為總的來說,分組和填充會更好。 我們使用DataFrame.groupby

df.groupby('two').apply(lambda x: x.ffill().bfill())

它可以在不使用 groupby 的情況下完成,但您必須按兩列排序:

df.sort_values(['two','one']).ffill().sort_index()

下面我向您展示另一個答案中提出的方法可能會失敗:

這是一個例子:

df=pd.DataFrame({'one':['a',np.nan,'c','d',np.nan,'c','b','b',np.nan,'a'],'two':[10,20,30,40,10,30,20,20,30,10]})
print(df)

   one  two
0    a   10
1  NaN   20
2    c   30
3    d   40
4  NaN   10
5    c   30
6    b   20
7    b   20
8  NaN   30
9    a   10

df.sort_values(['two']).fillna(method='ffill').sort_index()


  one  two
0   a   10
1   a   20
2   c   30
3   d   40
4   a   10
5   c   30
6   b   20
7   b   20
8   c   30
9   a   10

如您所見,另一個答案中的建議方法在此處失敗(請參見第 1 行)。 發生這種情況是因為某些 NaN 值可能是列“二”的特定值的第一個值,並用上一組的值填充。

如果我們先分組,則不會發生這種情況:

df.groupby('two').apply(lambda x: x.ffill().bfill())

  one  two
0   a   10
1   b   20
2   c   30
3   d   40
4   a   10
5   c   30
6   b   20
7   b   20
8   c   30
9   a   10

正如我所說,我們可以使用DataFrame.sort_values但我們需要對兩列進行排序。 我推薦你這個方法

df.sort_values(['two','one']).ffill().sort_index()

  one  two
0   a   10
1   b   20
2   c   30
3   d   40
4   a   10
5   c   30
6   b   20
7   b   20
8   c   30
9   a   10

這里是:

df.ffill(inplace=True)

output:

   one  two
0    a   10
1    b   20
2    c   30
3    d   40
4   aa   50
5   bb   60
6    a   10
7    b   20
8    c   30
9    d   40
10  aa   50

嘗試這個:

df = df.sort_values(['two']).fillna(method='ffill').sort_index()

哪個會給你

   one  two
0    a   10
1    b   20
2    c   30
3    d   40
4   aa   50
5   bb   60
6    a   10
7    b   20
8    c   30
9    d   40
10  aa   50

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM