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,提问作者김수환
相关产品推荐
相关产品推荐

