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

Power Query技术需求:Name and address字段为null时重置索引并设为0

自定义索引实现方案

需求回顾

当Name and address字段为null时,对应Index设为0;非null的连续行按顺序从1开始计数,遇到null后,下一组非null行重新从1开始计数。


Pandas 实现代码

import pandas as pd

# 模拟数据集(替换为你的实际数据)
df = pd.DataFrame({
    "Name and address": ["aasdfnkjdf", "aasdfnkjdf", "aasdfnkjdf", None, None, "aasdfnkjdf", "aasdfnkjdf", None, None, None, "aasdfnkjdf", "aasdfnkjdf", None, "aasdfnkjdf", "aasdfnkjdf"]
})

# 生成分组标识:每遇到null,分组ID递增
df['group_id'] = df['Name and address'].isnull().cumsum()

# 对每个分组内的非null行计数,null行直接设为0
df['Index'] = df.groupby('group_id').cumcount() + 1
df.loc[df['Name and address'].isnull(), 'Index'] = 0

# 清理临时列(可选)
df = df.drop('group_id', axis=1)

print(df)

代码说明:

  • isnull().cumsum():通过累加null的出现次数,为连续的非null行分配相同的分组ID,遇到null后分组ID自动递增,实现计数重置。
  • groupby('group_id').cumcount() +1:对每个分组内的行从1开始顺序计数。
  • 最后通过loc将所有null行的Index值改为0。

SQL 实现代码(以MySQL为例)

假设你的数据表名为your_table,且存在用于排序的主键id:

SELECT 
    `Name and address`,
    CASE 
        WHEN `Name and address` IS NULL THEN 0
        ELSE ROW_NUMBER() OVER (PARTITION BY grp ORDER BY id)
    END AS `Index`
FROM (
    SELECT 
        *,
        SUM(CASE WHEN `Name and address` IS NULL THEN 1 ELSE 0 END) OVER (ORDER BY id) AS grp
    FROM your_table
) t;

代码说明:

  • 子查询中用窗口函数SUM() OVER (ORDER BY id)累加null的出现次数,生成分组标识grp。
  • 主查询中用ROW_NUMBER()对每个grp内的非null行排序计数,null行直接返回0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 03:46:14