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

如何使用Pandas高效按列中数量值展开DataFrame?

高效实现按Qty复制行并添加序号列的Pandas方案

嗨,我来帮你搞定这个问题!用Python循环处理确实在数据量上去之后效率拉胯,完全可以用Pandas的内置方法来解决,代码简洁还快,根本不需要写循环~

初始数据

先回顾下你的初始DataFrame:

import pandas as pd
df = pd.DataFrame({'first-name':['Jan','Leilani'],'Qty':[2,4]})

输出:

Qtyfirst-name
2Jan
4Leilani

实现步骤

这里我们用repeat复制行,再结合groupby+cumcount()生成序号列,两步就能完成需求:

  1. 按Qty值复制行:利用df.index.repeat()方法,根据每行的Qty数值重复对应次数的行:
df_expanded = df.loc[df.index.repeat(df['Qty'])]

这一步后的数据会变成:

Qtyfirst-name
2Jan
2Jan
4Leilani
4Leilani
4Leilani
4Leilani
  1. 添加position序号列:通过groupby(level=0)按原索引分组,再用cumcount()生成组内连续计数(默认从0开始),加1后就得到从1起始的序号:
df_expanded['position'] = df_expanded.groupby(level=0).cumcount() + 1

最后可以重置索引让数据更整洁:

df_expanded = df_expanded.reset_index(drop=True)

最终输出

此时的df_expanded就是你想要的结果:

Qtyfirst-nameposition
2Jan1
2Jan2
4Leilani1
4Leilani2
4Leilani3
4Leilani4

补充说明

你提到的melt函数其实是用来处理宽表转长表的场景(比如把多列合并成一列),并不适配这个需求。而上面用到的方法都是Pandas的向量化操作,比Python循环效率高几个数量级,尤其是数据量大的时候,优势会特别明显~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:38:53