2017-03-15 107 views
0

我用BS4刮房屋廣告和使用熊貓分析數據。熊貓groupby意味着多列和計數單列

下面的命令,

madrid_rooms_district=df.groupby('district', as_index=False)['rent','size house, m2', 'price per m2','deposit'].agg(['mean', 'size']) 

產生具有每行一個區,以及用於'rent','size house, m2', 'price per m2','deposit'每列區的裝置的表。這是我需要的。

我還需要一個列顯示每個分區的廣告數量,因此'size'.agg()。但是,當前設置的命令爲我提供了四個列,其中顯示了廣告數量,['rent','size house, m2', 'price per m2','deposit']中的每個項目都有一列。

如何將「計數」列的數量從四個減少到一個?

E.g.我有,

district | rent; mean | rent; size | size house, m2; mean | size house, m2; mean | ... 
    ----------------------------------------------------------------------------------- 
    A  | 300  |  2  |  100   |  2    | ... 
    B  | 400  |  6  |  200   |  6    | ... 
    C  | 500  |  3  |  120   |  3    | ... 

,我需要,

district | rent; mean | size house, m2; mean | price per m2; mean | deposit; mean | count 
    --------------------------------------------------------------------------------------- 
    A  | 300  |  100   |  15   |  1  | 2 
    B  | 400  |  200   |  14   |  2  | 6 
    C  | 500  |  120   |  12   |  3  | 3 

我一直在試圖通過不同的創建兩個DataFrames解決這個;一個用於手段,另一個用於計數,但無法讓它們合併到一個DataFrame中。試圖系列,試圖加入,試圖追加,試圖...

回答

0

一個簡單的選擇是對的人的列添加到原始數據集(可以稱之爲「計數」),然後在此列總結:

df['count'] = 1 
aggregator = {'rent' : 'mean', 
       'size house, m2' : 'mean', 
       'price per m2': 'mean', 
       'deposit' : 'mean', 
       'count': 'sum'} 
madrid_rooms_district = df.groupby('district', as_index=False)['rent','size house, m2', 'price per m2', 'deposit'].agg(aggregator) 
+0

太棒了!奇蹟般有效。謝謝。 – LucSpan

+0

@LucSpan很棒,在這裏工作。如果您對此感到滿意,請將其標記爲答案:) – Igor