2017-03-17 29 views
2

我有以下datadrame如何GROUP BY和在大熊貓組每列數無缺失值的數量

user_id var qualified_date loyal_date 
    1  1  2017-01-17  2017-02-03 
    2  1  2017-01-03  2017-01-13 
    3  1  2017-01-11  NaT 
    4  1  NaT   NaT 
    5  1  NaT   NaT 
    6  2  2017-01-15  2017-02-14 
    7  2  2017-01-07  NaT 
    8  2  2017-01-23  2017-02-18 
    9  2  2017-01-25  NaT 
    10  2  2017-01-11  2017-03-01 

我需要在「無功」值GROUPBY這個數據幀和張數對於'qualified_date'和'engaged_date'列中的每一個,都是非缺失值。我可以爲每列單獨做,並將它們手動放在一個數據框中,但我正在尋找一種groupby方法或類似的方式,我可以自動地來到一個新的DF,而不是'var'中的值作爲索引和兩列顯示每個組的非缺失值的計數。

像這樣

var qualified_count loyal_count 
1  xx   xx 
2  xx   xx 

回答

4

您可以使用DF.GroupBy.count只包括非NaN項而計數。所以,你可以讓var是組合鍵,然後分別彙總數爲DF兩個選定的列如下所示:

cols = ['qualified_date', 'loyal_date'] 
df.groupby('var')[cols].agg('count').add_suffix("_count").reset_index() 

enter image description here

+1

感謝這正是我期待的,是有任何方式來轉動它,'var 1','var 2'作爲列名,'qualified_date_count'和'loyal_date_count'作爲索引?我們可以編輯代碼嗎?或者我需要問一個新的問題? – sanaz

+1

只要刪除'.reset_index()'部分並轉置'DF'。你將不得不處理額外的格式,但你的列名。 –