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

pandas DataFrame如何补全循环规律缺失行并将对应值填充为0

实现思路

核心逻辑是先给原数据的循环序列打分组标签,每遇到一次循环起始值0就归为新的一组,再给每组补全0、1、2、3的完整序列,匹配原数据的值,缺失位置填充0即可,该方法同时适配你提到的两种场景。

场景1:列名为df、df1的情况

import pandas as pd

# df_raw为你读入的原始DataFrame
# 新增分组列:每遇到df值为0,分组号+1
df_raw['group_id'] = (df_raw['df'] == 0).cumsum()

# 生成单组的完整循环序列
full_seq = pd.DataFrame({'df': [0, 1, 2, 3]})
# 生成所有分组的完整循环序列
full_df = df_raw[['group_id']].drop_duplicates().merge(full_seq, how='cross')

# 合并原数据,缺失的df1填充为0
result = full_df.merge(df_raw, on=['group_id', 'df'], how='left').fillna({'df1': 0})

# 调整列顺序,重置索引得到最终结果
result = result[['df', 'df1']].reset_index(names='index')

场景2:列名为df1、df2的补充场景

仅需要替换对应列名即可,逻辑完全一致:

import pandas as pd

# df_raw为你读入的原始DataFrame
df_raw['group_id'] = (df_raw['df1'] == 0).cumsum()

full_seq = pd.DataFrame({'df1': [0, 1, 2, 3]})
full_df = df_raw[['group_id']].drop_duplicates().merge(full_seq, how='cross')

result = full_df.merge(df_raw, on=['group_id', 'df1'], how='left').fillna({'df2': 0})

result = result[['df1', 'df2']].reset_index(names='index')

内容的提问来源于stack exchange,提问作者김수환

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:36:03