Python中基于Quantity列复制行时,如何逐步修改复制行的Price值?
按Quantity列复制行并逐次递增Price值
以下是几种主流工具的实现方案,完全贴合你基于Quantity复制行且Price逐次+1的需求:
Excel 公式实现
假设数据从A2单元格开始,A列是唯一标识(比如ID),B列是Quantity,C列是Price:
- 生成所有行的标识列(D列):
在D2输入公式后下拉至空值:=IF(ROW()-ROW($D$1)<=SUM($B$2:$B$100),INDEX($A$2:$A$100,MATCH(TRUE,SUBTOTAL(9,OFFSET($B$2,0,0,ROW($B$2:$B$100)-ROW($B$2)+1))>=ROW()-ROW($D$1),0)),"") - 生成递增后的Price列(E列):
在E2输入公式后下拉:=IF(D2<>"",INDEX($C$2:$C$100,MATCH(D2,$A$2:$A$100,0))+COUNTIF($D$2:D2,D2)-1,"")
原理:用COUNTIF统计当前标识出现的次数,减1就是Price的递增量——原行是第1次出现,所以加0;复制的第一行是第2次,加1,以此类推。
Power Query (Excel内置工具) 实现
- 选中数据区域,点击「数据」选项卡 → 「从表格/区域」导入Power Query编辑器。
- 添加自定义列,输入公式:
= List.Generate( () => [Counter=1, NewPrice=[Price]], each [Counter] <= [Quantity], each [Counter=[Counter]+1, NewPrice=[Price]+[Counter]], each [NewPrice] ) - 点击自定义列右侧的「展开到新行」按钮,将列表拆分为多行。
- 删除原Quantity和Price列,保留新生成的NewPrice(可重命名为Price),最后关闭并上载到Excel。
Python Pandas 实现
import pandas as pd # 示例数据 df = pd.DataFrame({ 'ID': ['A001', 'A002'], 'Quantity': [3, 1], 'Price': [20, 15] }) # 按Quantity+1复制行(+1是保留原行) expanded_df = df.loc[df.index.repeat(df['Quantity'] + 1)] # 分组后给Price递增加1 expanded_df['Price'] = expanded_df.groupby(level=0)['Price'].transform(lambda x: x + range(len(x))) # 重置索引 expanded_df = expanded_df.reset_index(drop=True) print(expanded_df)
输出结果:
ID Quantity Price 0 A001 3 20 1 A001 3 21 2 A001 3 22 3 A001 3 23 4 A002 1 15 5 A002 1 16
内容的提问来源于stack exchange,提问作者snl
相关产品推荐
相关产品推荐

