第一个非NaN值Python数据帧之前的NaN值的数量

时间:2017-10-25 07:38:25

标签: python-3.x pandas dataframe

我有一个包含多个列的数据框,其中一些包含NaN值。我想为每一行创建另一列,其中包含总列数减去第一个非NaN值之前的NaN值数。

原始数据框:

ID    Value0     Value1      Value2      Value3
1       10         10           8          15 
2       NaN        45          52         NaN      
3       NaN       NaN          NaN        NaN    
4       NaN       NaN          100        150   

额外的列看起来像:

  ID    NewColumn

   1     4
   2     3
   3     0
   4     2

提前致谢!

1 个答案:

答案 0 :(得分:2)

  • 将索引设置为ID
  • 附加非空列以停止/捕获argmax
  • 使用argmax查找第一个非空值
  • 从相关列的长度中减去这些值
df.assign(
    NewColumn=
        df.shape[1] - 1 -
        df.set_index('ID').assign(notnull=1).notnull().values.argmax(1)
)

   ID  Value0  Value1  Value2  Value3  NewColumn
0   1    10.0    10.0     8.0    15.0          4
1   2     NaN    45.0    52.0     NaN          3
2   3     NaN     NaN     NaN     NaN          0
3   4     NaN     NaN   100.0   150.0          2