Python实现DataFrame按数量拆分:每行仅保留1个数量
解决方案
可以用Pandas的原生方法实现这个需求,以下两种都是简洁的Pythonic写法:
方法一:使用index.repeat
先根据qty列的值重复对应行,再统一将qty列设为1:
import pandas as pd # 构造输入DataFrame df = pd.DataFrame({ 'Name': ['Apple', 'Avocado'], 'qty': [3, 2], 'Price': [3.50, 1.50] }) # 按qty值重复每行 df_expanded = df.loc[df.index.repeat(df['qty'])] # 重置qty为1 df_expanded['qty'] = 1 # 重置索引(可选,让索引连续) df_expanded = df_expanded.reset_index(drop=True) print(df_expanded)
输出结果:
Name qty Price 0 Apple 1 3.5 1 Apple 1 3.5 2 Apple 1 3.5 3 Avocado 1 1.5 4 Avocado 1 1.5
方法二:使用explode
先把qty列转换为对应长度的[1,1,...]列表,再展开列表:
import pandas as pd df = pd.DataFrame({ 'Name': ['Apple', 'Avocado'], 'qty': [3, 2], 'Price': [3.50, 1.50] }) # 将qty转为包含对应数量1的列表 df['qty'] = df['qty'].map(lambda x: [1]*x) # 展开列表并重置索引 df_expanded = df.explode('qty', ignore_index=True) print(df_expanded)
两种方法都能高效实现需求,都是Pandas推荐的简洁写法,符合Pythonic风格。
内容的提问来源于stack exchange,提问作者Thiago Santos
相关产品推荐
相关产品推荐

