计算熊猫行中非 NaN 值的数量和长度

时间:2020-12-23 21:23:50

标签: pandas

我有:

pd.DataFrame({'A':[1,2,3],'B':[np.NaN,4,5],'C':[6,7,np.NaN],'D':[8,9,np.NaN],'E':[np.NaN,11,12],'F':[13,14,15]})

    A   B   C   D   E       F
0   1   NaN 6.0 8   NaN     13
1   2   4.0 7.0 9   11.0    14
2   3   5.0 NaN NaN 12.0    15

我想计算非 NaN 序列的数量 (cnt) 和每次运行的长度 (runs)。即,第 0 行有一个长度为 1,2 和 1 的非 NaN 序列,总共 3 个序列。

pd.DataFrame({'runs':[[1,2,1],[5],[2,2]],'cnt':[3,1,2]})
    runs        cnt
0   [1, 2, 1]   3
1   [5]         1
2   [2, 2]      2

任何建议

1 个答案:

答案 0 :(得分:4)

我们可以对stackgroupby创建的子组进行cumsum然后isna

s = df.stack(dropna=False).reset_index(name='value')
out = s[s['value'].notna()].groupby([s['level_0'],s['value'].isna().cumsum()]).size().groupby(level=[0]).agg([list,len])
out
Out[269]: 
              list  len
level_0                
0        [1, 2, 1]    3
1              [6]    1
2           [2, 2]    2