2017-10-21 97 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'。 –