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

如何在Pandas中实现基于起始值与数量的数据展开逻辑?

Pandas实现按数量扩展行并生成连续编号的方案

方法1:使用repeat扩展行 + 分组计算编号

这种方法先按qty字段重复每行数据,再通过分组计算生成连续的number值:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'item id': [1],
    'qty': [3],
    'start': [1000],
    'end': [1003]
})

# 按qty重复每行数据
expanded_df = df.loc[df.index.repeat(df['qty'])]

# 分组计算number:start值加上组内的行索引(从0开始)
expanded_df['number'] = expanded_df.groupby('item id')['start'].transform(
    lambda x: x + pd.Series(range(len(x)), index=x.index)
)

# 重置索引(可选,让索引连续)
expanded_df = expanded_df.reset_index(drop=True)

print(expanded_df)

输出结果:

item id  qty  start   end  number
0        1    3   1000  1003    1000
1        1    3   1000  1003    1001
2        1    3   1000  1003    1002

方法2:使用apply生成编号列表 + explode拆分多行

这种方法先为每行生成对应的编号列表,再将列表拆分成多行:

import pandas as pd

df = pd.DataFrame({
    'item id': [1],
    'qty': [3],
    'start': [1000],
    'end': [1003]
})

# 为每行生成从start开始的连续qty个数字的列表
df['number'] = df.apply(lambda row: list(range(row['start'], row['start'] + row['qty'])), axis=1)

# 将列表拆分成多行
expanded_df = df.explode('number', ignore_index=True)

print(expanded_df)

输出结果与方法1完全一致。

补充说明

  • 两种方法均采用Pandas的批量操作,避免了原生Python的手动循环,处理大规模数据时效率更高。
  • 你提供的原生Python代码存在逻辑问题:number = []放在循环内会每次清空列表,且np.append的语法错误;Pandas的方案无需这类手动循环逻辑,直接通过内置API实现需求。

内容的提问来源于stack exchange,提问作者Obvious Nchimunya Chilyabanyam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:05:19