2016-08-16 38 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)。我改变了一点,所以没有多层次的索引 –