2015-05-12 165 views
4

我想從數據塊上的groupby對象中聚合一些統計數據。我必須將數據分塊,因爲有很多(1800萬)行。我想在每個塊中找到每個組中的行數,然後將它們相加。我可以添加groupby對象,但是當一個組中不存在一個詞時,NaN就是結果。看到這個情況:由對象聚合大熊貓組

>>> df = pd.DataFrame({'X': ['A','B','C','A','B','C','B','C','D','B','C','D'], 
         'Y': range(12)}) 
>>> df 
    X Y 
0 A 0 
1 B 1 
2 C 2 
3 A 3 
4 B 4 
5 C 5 
6 B 6 
7 C 7 
8 D 8 
9 B 9 
10 C 10 
11 D 11 
>>> df[0:6].groupby(['X']).count() + df[6:].groupby(['X']).count() 
    Y 
X  
A NaN 
B 4 
C 4 
D NaN 

但我希望看到:

>>> df[0:6].groupby(['X']).count() + df[6:].groupby(['X']).count() 
    Y 
X  
A 2 
B 4 
C 4 
D 2 

有沒有做到這一點的好辦法?請注意,在實際代碼中,我循環遍歷每個組的百萬行的分塊迭代器。

+0

的'fill_value'是一個不錯的選擇,另一種選擇是使用'fillna(0)'每個GROUPBY結果,然後總結他們 – joris

+0

你可能想看看Blaze。 http://continuum.io/blog/blaze-expressions – Alexander

回答

2

呼叫add並通過fill_value=0你可以反覆添加,而分塊我想:

In [98]: 

df = pd.DataFrame({'X': ['A','B','C','A','B','C','B','C','D','B','C','D'], 
         'Y': np.arange(12)}) 
df[0:6].groupby(['X']).count().add(df[6:].groupby(['X']).count(), fill_value=0) 
Out[98]: 
    Y 
X 
A 2 
B 4 
C 4 
D 2 
+0

謝謝,這對我很有用。我遍歷每個chuck,groupby大塊,然後做groupedsum.add(newgroupedchunk,fill_value = 0)。 – Kyle

+0

很酷,如果我的答案解決了您的問題,請接受它,以便它不會未答覆,我的答案左上角將出現一個空的勾號標記 – EdChum