2017-10-21 107 views
1

提前道歉,我無法創建代碼來生成示例數據。給列值計數python pandas

這是我的數據框,列B,C,D,E有預約日期。我正在計算每行存在的日期數並將該數附加到列G,而不打擾列A和F.我是否需要函數?數值的真/假然後計數?有一個簡單的方法嗎?

A  B   C   D   E   F   G 
0 1  20171021 20171021 20171021 20171021 id_123 
1 2  NaN   20171021 20171021 20171021 id_234 
2 3  NaN   NaN   20171021 20171021 id_345 
3 4  NaN   NaN   NaN   20171021 id_456 

所需的輸出

A  B   C   D   E   F   G 
0 1  20171021 20171021 20171021 20171021 id_123  4 
1 2  NaN   20171021 20171021 20171021 id_234  3 
2 3  NaN   NaN   20171021 20171021 id_345  2 
3 4  NaN   NaN   NaN   20171021 id_456  1 

回答

3

基本上,使用count

cnt = df[['B', 'C', 'D', 'E']].count(axis=1) 
print(cnt) 
0 4 
1 3 
2 2 
3 1 
dtype: int64 

df['G'] = cnt 
+0

也許我沒想太多 – Dark

+1

@Bharathshetty你做,但列切片是一個很好的接觸,我喜歡它。會upvote,給我第二個:) –

+0

它的靈感來自你:) – Dark

2

你可以總結非空值,即.notnull()將給布爾值掩碼。布爾掩碼的總和給出了計數。

df['G'] = df.loc[:,'B':'E'].notnull().sum(1) 
 
    A   B   C   D   E  F G 
0 1 20171021.0 20171021.0 20171021.0 20171021 id_123 4 
1 2   NaN 20171021.0 20171021.0 20171021 id_234 3 
2 3   NaN   NaN 20171021.0 20171021 id_345 2 
3 4   NaN   NaN   NaN 20171021 id_456 1 
+1

謝謝!這就是我用True/False查找的內容,下次我會記住'boolean mask'。 –