我有以下数据框

print(A)

   Index  1or0
0      1     0
1      2     0
2      3     0
3      4     1
4      5     1
5      6     1
6      7     1
7      8     0
8      9     1
9     10     1

我有以下代码(Pandas Dataframe count occurrences that only happen immediately),它计算紧随其后发生的值的出现次数.

ser = A["1or0"].ne(A["1or0"].shift().bfill()).cumsum()

B = (
        A.groupby(ser, as_index=False)
            .agg({"Index": ["first", "last", "count"],
                  "1or0": "unique"})
            .set_axis(["StartNum", "EndNum", "Size", "Value"], axis=1)
            .assign(Value= lambda d: d["Value"].astype(str).str.strip("[]"))
    )

print(B)
​
   StartNum  EndNum  Size Value
0         1       3     3     0
1         4       7     4     1
2         8       8     1     0
3         9      10     2     1

问题是,当NaN值出现时,代码不会将它们放在一个间隔中,它总是将它们计算为一个大小的间隔,而不是3

print(A2)

   Index  1or0
0      1     0
1      2     0
2      3     0
3      4     1
4      5     1
5      6     1
6      7     1
7      8     0
8      9     1
9     10     1
10    11    NaN
11    12    NaN
12    13    NaN

print(B2)
​
   StartNum  EndNum  Size Value
0         1       3     3     0
1         4       7     4     1
2         8       8     1     0
3         9      10     2     1
4         11     11     1     NaN
5         12     12     1     NaN
6         13     13     1     NaN

但我想让B2成为下面的

print(B2Wanted)
​
   StartNum  EndNum  Size Value
0         1       3     3     0
1         4       7     4     1
2         8       8     1     0
3         9      10     2     1
4         11     13     3     NaN

我需要做什么更改才能让它也适用于NaN?

推荐答案

在创建您的Grouper之前,前fillna个值是不可能的(这里是-1):

group = A['1or0'].fillna(-1).diff().ne(0).cumsum()

# or
# s = A['1or0'].fillna(-1)
# group = s.ne(s.shift()).cumsum()

B = (A.groupby(group, as_index=False)
      .agg(**{'StartNum': ('Index', 'first'),
              'EndNum': ('Index', 'last'),
              'Size': ('1or0', 'size'),
              'Value': ('1or0', 'first')
             })
    )

输出:

   StartNum  EndNum  Size  Value
0         1       3     3    0.0
1         4       7     4    1.0
2         8       8     1    0.0
3         9      10     2    1.0
4        11      13     3    NaN

Python相关问答推荐

Python中的嵌套Ruby哈希

如何在类和classy-fastapi -fastapi- followup中使用FastAPI创建路由

如何将多进程池声明为变量并将其导入到另一个Python文件

如何更新pandas DataFrame上列标题的de值?

在matplotlib中删除子图之间的间隙_mosaic

如何在Python中使用Pandas将R s Tukey s HSD表转换为相关矩阵''

旋转多边形而不改变内部空间关系

matplotlib图中的复杂箭头形状

Python Pandas—时间序列—时间戳缺失时间精确在00:00

ModuleNotFoundError:没有模块名为x时try 运行我的代码''

没有内置pip模块的Python3.11--S在做什么?

如何在信号的FFT中获得正确的频率幅值

我可以不带视频系统的pygame,只用于游戏手柄输入吗?''

Python OPCUA,modbus通信代码运行3小时后出现RuntimeError

TypeError:';Locator';对象无法在PlayWriter中使用.first()调用

PYTHON中的selenium不会打开 chromium URL

使用美汤对维基百科表格进行网络刮擦未返回任何内容

如何批量训练样本大小为奇数的神经网络?

pyspark where子句可以在不存在的列上工作

使用元组扩展字典的产品挑战