Pandas中的链式条件计数

时间:2018-03-09 17:25:34

标签: python pandas

我有一个数据框,用于查看表单的填写方式。这是一个例子:

ID   Name   Postcode  Street        Employer  Salary     
1    John   NaN       Craven Road   NaN          NaN
2    Sue    TD2       NAN           NaN        15000
3    Jimmy  MW6       Blake Street  Bank       40000
4    Laura  QE2       Mill Lane     NaN        20000
5    Sam    NW2       Duke Avenue   Farms      35000
6    Jordan SE6       NaN           NaN          NaN
7    NaN    CB2       NaN           Startup      NaN `

我希望在所有先前的列都已填充的情况下返回连续填充列的计数。最终输出应该类似于:

Name   Postcode   Street   Employer    salary
  6           5        3          2         2 

有很好的熊猫方式吗?我想可能有一种方法可以应用一个掩码,这样如果任何先前的布尔值为0,则当前列也为零然后计算,但我不确定这是否是最好的方法。

谢谢!

2 个答案:

答案 0 :(得分:1)

我认为您可以使用notnullcummin

In [99]: df.notnull().cummin(axis=1).sum(axis=0)
Out[99]: 
Name        6
Postcode    5
Street      3
Employer    2
Salary      2
dtype: int64

虽然注意到在我做之前我必须用浮动NaN替换你的NAN(Sue' s street),我认为ID是你的索引。

累积最小值是实现"应用掩码的一种方法,这样如果任何先前的布尔值为0,则当前列也为零",正如您预测的那样。

答案 1 :(得分:0)

也许cumprod顺便说一句,你的df中有'NAN',我在notnull这里尝试

df.notnull().cumprod(1).sum()
Out[59]: 
ID          7
Name        6
Postcode    5
Street      4
Employer    2
Salary      2
dtype: int64