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

如何修改Pandas聚合代码以合并连续NaN值为同一区间?

解决连续NaN分组问题的修改方案

原代码无法合并连续NaN的核心原因是:Pandas中NaN与任何值(包括自身)的比较结果都是False,且shift().bfill()的填充逻辑会破坏连续NaN的连续性判断。我们需要调整分组键的生成逻辑,将连续NaN视为相同值进行分组。

修改后的完整代码如下:

# 生成正确的分组键:连续相同值(包括连续NaN)归为同一组
same_as_prev = A["1or0"].eq(A["1or0"].shift()) | (A["1or0"].isna() & A["1or0"].shift().isna())
ser = (~same_as_prev).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("[]"))
    )

关键修改说明:

  • 分组键逻辑调整:
    • same_as_prev序列标记当前行值是否与前一行值相同:
      • A["1or0"].eq(A["1or0"].shift()):判断非NaN值是否与前一行相等
      • (A["1or0"].isna() & A["1or0"].shift().isna()):额外判断当前行和前一行是否均为NaN,将连续NaN视为相同值
    • (~same_as_prev).cumsum():当当前行与前一行不同时,分组号递增,确保连续相同值(包括NaN)归为同一组
  • 后续处理兼容:原代码的agg和assign逻辑无需修改,连续NaN分组后的unique()会返回[nan],经astype(str).str.strip("[]")处理后会显示为nan,符合需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:45:35