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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 21:33:01