Python中如何基于DataFrame列条件批量插入连续值新行?
实现DataFrame按列值生成连续行的需求
需求说明
读取目标DataFrame,针对每行生成从d列初始值到c列值的所有连续数值的行,其中a、b、c列保持原值不变,仅d列依次递增至c列的值。
原DataFrame
import pandas as pd df = pd.DataFrame({ 'a': [201607, 202103, 201906], 'b': [1924, 2166, 2075], 'c': [1927, 2170, 2079], 'd': [1924, 2166, 2075] })
期望最终结果
a b c d 0 201607 1924 1927 1924 1 201607 1924 1927 1925 2 201607 1924 1927 1926 3 201607 1924 1927 1927 4 202103 2166 2170 2166 5 202103 2166 2170 2167 6 202103 2166 2170 2168 7 202103 2166 2170 2169 8 202103 2166 2170 2170 9 201906 2075 2079 2075 10 201906 2075 2079 2076 11 201906 2075 2079 2077 12 201906 2075 2079 2078 13 201906 2075 2079 2079
高效实现方案
不推荐逐行循环插入的方式(会频繁触发DataFrame内存重分配,数据量大时性能极差),推荐使用以下两种向量化操作实现:
方法一:apply生成序列 + explode拆分
# 定义函数,生成当前行d到c的整数序列 def generate_d_range(row): return list(range(row['d'], row['c'] + 1)) # 为每行生成d的连续序列,再拆分成行 df['d'] = df.apply(generate_d_range, axis=1) result_df = df.explode('d', ignore_index=True) print(result_df)
说明:range(row['d'], row['c']+1)中加1是因为range为左闭右开区间,确保包含c列的值。
方法二:repeat重复行 + 分组计算d值
# 计算每行需要生成的行数(c - d + 1) df['row_count'] = df['c'] - df['d'] + 1 # 按计算出的次数重复每行 result_df = df.loc[df.index.repeat(df['row_count'])] # 分组后递增d值 result_df['d'] = result_df.groupby(level=0).cumcount() + result_df['d'] # 重置索引并删除辅助列 result_df = result_df.reset_index(drop=True).drop('row_count', axis=1) print(result_df)
说明:通过groupby(level=0).cumcount()获取每行重复后的递增序号,与原始d值相加得到连续的序列值。
内容的提问来源于stack exchange,提问作者danny
相关产品推荐
相关产品推荐

