基于min和max值重复Pandas DataFrame行并生成递增value列
Pandas按min/max值重复行并生成递增value列
输入示例
| ID | min | max |
|---|---|---|
| Product ABC | 3 | 6 |
| Product XXXX | 8 | 10 |
期望输出
| ID | min | max | value |
|---|---|---|---|
| Product ABC | 3 | 6 | 3 |
| Product ABC | 3 | 6 | 4 |
| Product ABC | 3 | 6 | 5 |
| Product ABC | 3 | 6 | 6 |
| Product XXXX | 8 | 10 | 8 |
| Product XXXX | 8 | 10 | 9 |
| Product XXXX | 8 | 10 | 10 |
解决方案
方法一:apply + explode(简洁直观)
利用apply为每行生成从min到max的序列,再用explode将序列拆分成多行:
import pandas as pd # 构造输入DataFrame df = pd.DataFrame({ 'ID': ['Product ABC', 'Product XXXX'], 'min': [3, 8], 'max': [6, 10] }) # 生成value序列并展开 df['value'] = df.apply(lambda row: pd.Series(range(row['min'], row['max'] + 1)), axis=1) df = df.explode('value', ignore_index=True)
方法二:numpy + repeat(高效适合大数据)
通过计算重复次数先复制行,再用numpy批量生成value列,性能更优:
import pandas as pd import numpy as np df = pd.DataFrame({ 'ID': ['Product ABC', 'Product XXXX'], 'min': [3, 8], 'max': [6, 10] }) # 计算每行需要重复的次数 repeat_counts = df['max'] - df['min'] + 1 # 重复行并重置索引 df_repeated = df.loc[df.index.repeat(repeat_counts)].reset_index(drop=True) # 批量生成递增的value值 values = np.concatenate([np.arange(mn, mx + 1) for mn, mx in zip(df['min'], df['max'])]) df_repeated['value'] = values
内容的提问来源于stack exchange,提问作者Awans
相关产品推荐
相关产品推荐

