2016-08-16 36 views
2

我首先創建了一些數據:創建NAN類別後,GROUPBY對象上聚集了錯誤

df = pd.DataFrame(data = {"A":np.random.random_integers(1,10,10), "B":np.arange(1,11,1)}) 
df.A.ix[3,4] = np.nan 

後來我有一個PD數據幀與NaN的

A B 
0 7 1 
1 1 2 
2 3 3 
3 NaN 4 
4 NaN 5 
5 9 6 
6 2 7 
7 10 8 
8 6 9 
9 6 10 

我試着組列A採用PD .cut功能在每個組別添加使用匯總功能

bin_S = pd.cut(df.A, [-math.inf, 3,5,8,9, math.inf],right= False) 
df.groupby(bin_S).agg("count") 

但是Nan值沒有分組(沒有Nan類別)

  A B 
A  
[-inf, 3) 2 2 
[3, 5)  1 1 
[5, 8)  3 3 
[8, 9)  0 0 
[9, inf) 2 2 

然後我試圖通過添加一個名爲新類別「失蹤」:

bin_S.cat.add_categories("Missing", inplace = True) 
bin_S.fillna(value = "Missing", inplace = True 

的分級系列看起來不錯。但是,這種聚合並不是我所期望的。

df.groupby(bin_S).agg("count") 

結果是,

  A B 
A  
[-inf, 3) 2 2 
[3, 5)  1 1 
[5, 8)  3 3 
[8, 9)  0 0 
[9, inf) 2 2 
Missing  0 2 

我期待列A和B列是完全一樣的。爲什麼他們在「失蹤」行上有所不同?真正的問題涉及到每個組的更復雜的操作。這個問題真的讓我感到困擾,因爲分組Nan值可能不可靠。

回答

2

'count'要跳過NaN。您可以使用'size'

df.groupby(bin_S).agg(["size"]) 

enter image description here

+1

感謝。 df.groupby(bin_S).agg(np.size)。我改變了一點,所以沒有多層次的索引 –