如何用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
相关产品推荐
相关产品推荐

