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

如何用Python Pandas补全DataFrame缺失sec值并重置sec列

解决Pandas补全连续秒数并重置索引的问题

原始数据

先定义初始DataFrame:

import pandas as pd

data = {
    'sec': [35,36,38,0,1,2,3,4,5,9],
    'rpm': [40.5,41.6,56,56.8,67,89,90,91,102,123]
}
df = pd.DataFrame(data)

步骤1:补全缺失的连续sec值,对应rpm填充0

我们需要识别sec列中的连续数值块,为每个块生成完整的连续序列,再合并后填充缺失的rpm值为0:

# 按连续数值分组:当sec与前一个值的差不为1时,生成新组
df['group'] = df['sec'].diff().ne(1).cumsum()

# 对每个组生成完整的sec序列,合并所有组
df1 = df.groupby('group').apply(
    lambda x: pd.DataFrame({'sec': range(x['sec'].min(), x['sec'].max()+1)})
).reset_index(drop=True)

# 合并原始rpm数据,缺失值填充0
df1 = df1.merge(df[['sec', 'rpm']], on='sec', how='left').fillna({'rpm': 0})

执行后得到的df1就是需求中补全后的结果。

步骤2:重置sec为从1开始的连续整数

直接为sec列赋值从1开始的连续序列即可:

df2 = df1.copy()
df2['sec'] = range(1, len(df2)+1)

或者用reset_index的方式:

df2 = df1.reset_index(drop=True)
df2['sec'] = df2.index + 1

两种方式都能得到目标结果。

验证结果

最终df2的输出与需求一致:

print(df2)
#    sec    rpm
# 0     1   40.5
# 1     2   41.6
# 2     3    0.0
# 3     4   56.0
# 4     5   56.8
# 5     6   67.0
# 6     7   89.0
# 7     8   90.0
# 8     9   91.0
# 9    10  102.0
# 10   11    0.0
# 11   12    0.0
# 12   13    0.0
# 13   14  123.0

内容的提问来源于stack exchange,提问作者appu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:40:12