我有一個DataFrame,在希望分組的列中有許多缺失值:import pandas as pdimport numpy as npdf = pd.DataFrame({'a': ['1', '2', '3'], 'b': ['4', np.NaN, '6']})In [4]: df.groupby('b').groupsOut[4]: {'4': [0], '6': [2]}看到Pandas刪除了具有NaN目標值的行。(我想包括這些行?。┯捎谖倚枰S多這樣的操作(許多col具有缺失的值),并且除了中位數(shù)(通常是隨機森林)之外,還使用更復(fù)雜的函數(shù),因此我想避免編寫過于復(fù)雜的代碼。有什么建議么?我應(yīng)該為此編寫一個函數(shù)還是有一個簡單的解決方案?
3 回答

有只小跳蛙
TA貢獻1824條經(jīng)驗 獲得超8個贊
這是在文檔的丟失數(shù)據(jù)部分中提到:
GroupBy中的NA組被自動排除。例如,此行為與R一致。
一種解決方法是在進行分組方式之前使用占位符(例如-1):
In [11]: df.fillna(-1)
Out[11]:
a b
0 1 4
1 2 -1
2 3 6
In [12]: df.fillna(-1).groupby('b').sum()
Out[12]:
a
b
-1 2
4 1
6 3
就是說,這感覺很糟糕……也許應(yīng)該有一個在groupby中包含NaN的選項(請參閱此github問題 -使用相同的占位符hack)。

慕桂英3389331
TA貢獻2036條經(jīng)驗 獲得超8個贊
古老的話題,如果有人仍然迷迷糊糊-另一個解決方法是在分組之前通過.astype(str)轉(zhuǎn)換為字符串。這樣可以節(jié)省NaN。
in:
df = pd.DataFrame({'a': ['1', '2', '3'], 'b': ['4', np.NaN, '6']})
df['b'] = df['b'].astype(str)
df.groupby(['b']).sum()
out:
a
b
4 1
6 3
nan 2
添加回答
舉報
0/150
提交
取消