You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计Pandas DataFrame每行初始NaN与额外列非NaN数量

Pandas DataFrame 统计需求

我有一个包含NaN值的Pandas DataFrame,包含原始列Heading 1、Heading 2、Heading 3,以及额外列Unnamed: 1、Unnamed: 2、Unnamed: 3,示例数据如下:

Heading 1Heading 2Heading 3Unnamed: 1Unnamed: 2Unnamed: 3
NaN342445NaNNaN
NaNNaN244511NaN
NaNNaNNaN454533
4NaN24NaNNaNNaN
NaNNaN4NaNNaNNaN
NaN3424NaNNaNNaN
223424NaNNaNNaN
NaN34NaN45NaNNaN

需要遍历每行完成两个统计:

  1. 原始列中的初始连续NaN值数量(仅计算开头的连续NaN,中间的NaN不计入)
  2. 额外列中的非NaN值数量

最终以字典形式返回结果,键为行索引,值为包含两个元素的列表:[原始列初始NaN数量, 额外列非NaN数量]。示例结果如下:

{0 : [1, 1], 
1 : [2, 2], 
2 : [3, 3], 
3 : [0, 0], 
4 : [2, 0], 
5 : [1, 0],
6 : [0, 0],
7 : [1, 1]}

注意:行3和行7的原始列中虽有1个和2个NaN,但仅统计开头的初始NaN,中间的不计入。


更新测试结果

@mozway和@Panda Kim的方案在首个测试DataFrame中均有效,但@mozway的方案在另一测试DataFrame中完全失效。@Panda Kim提供了两种方案(cumsum()和x.first_valid_index()),但在新测试DataFrame中结果略有差异。

新测试DataFrame

Heading 1Heading 2Heading 3Unnamed: 1Unnamed: 2Unnamed: 3Unnamed: 4
NaN342445NaNNaNNaN
NaNNaN244511NaNNaN
NaNNaNNaN454533NaN
4NaN24NaNNaNNaNNaN
NaNNaN4NaNNaNNaNNaN
NaN3424NaNNaNNaNNaN
223424NaNNaNNaNNaN
NaN34NaN45NaNNaNNaN
NaNNaNNaNNaN122245
NaNNaNNaNNaNNaN1169
NaNNaNNaNNaN12NaN45
NaNNaNNaNNaNNaNNaN45
NaNNaNNaNNaNNaN44NaN

各方案结果对比

@Panda KIM(first_valid_index()方案)

{0: [1, 1], 1: [2, 2], 2: [3, 3], 3: [0, 0], 4: [2, 0], 5: [1, 0], 6: [0, 0], 7: [1, 1], 8: [3, 3], 9: [3, 2], 10: [3, 2], 11: [3, 1], 12: [3, 1]}

@Panda Kim(cumsum()方案)

{0: [1, 1], 1: [2, 2], 2: [3, 3], 3: [0, 0], 4: [2, 0], 5: [1, 0], 6: [0, 0], 7: [1, 1], 8: [4, 3], 9: [5, 2], 10: [4, 2], 11: [6, 1], 12: [5, 1]}

@mozway方案

{0: [1, 1], 1: [2, 2], 2: [3, 3], 3: [0, 0], 4: [2, 0], 5: [1, 0], 6: [0, 0], 7: [1, 1], 8: [3, 0], 9: [3, 0], 10: [3, 0], 11: [3, 0], 12: [3, 0]}

内容的提问来源于stack exchange,提问作者lowkey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 18:40:38