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

基于列值扩展Pandas DataFrame行的Python实现需求

基于DataFrame的index_end列扩展数据集

初始数据

itemindex_end
A3
B4
C1

目标效果

需要将每个item对应的行,按照index_end的数值扩展为从1到该数值的多行,并新增index列记录分区内的连续索引,最终结果如下:

itemindex_endindex
A31
A32
A33
B41
B42
B43
B44
C11

Pandas解决方案

方法1:apply生成序列 + explode展开

先为每行生成从1到index_end的列表,再用explode将列表拆分为多行:

import pandas as pd

# 构造初始DataFrame
df = pd.DataFrame({'item': ['A', 'B', 'C'], 'index_end': [3, 4, 1]})

# 为每行生成index序列,再展开
df['index'] = df['index_end'].apply(lambda x: list(range(1, x+1)))
df = df.explode('index', ignore_index=True)

方法2:repeat重复行 + groupby生成索引

先按index_end的值重复对应行,再分组生成连续索引:

import pandas as pd

df = pd.DataFrame({'item': ['A', 'B', 'C'], 'index_end': [3, 4, 1]})

# 按index_end重复每行
df_expanded = df.loc[df.index.repeat(df['index_end'])]

# 分组后生成从1开始的连续索引
df_expanded['index'] = df_expanded.groupby(level=0).cumcount() + 1
df_expanded = df_expanded.reset_index(drop=True)

方法3:构造多级索引转换

通过构建item和index的多级索引,再转换为目标DataFrame:

import pandas as pd

df = pd.DataFrame({'item': ['A', 'B', 'C'], 'index_end': [3, 4, 1]})

# 生成所有(item, index)的元组对
index_tuples = []
for _, row in df.iterrows():
    index_tuples.extend([(row['item'], idx) for idx in range(1, row['index_end'] + 1)])

# 转换为多级索引并生成DataFrame
multi_idx = pd.MultiIndex.from_tuples(index_tuples, names=['item', 'index'])
df_result = pd.DataFrame(index=multi_idx).reset_index()

# 合并原数据的index_end列
df_result = df_result.merge(df, on='item')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 03:37:09