如何基于Pandas DataFrame的column3非缺失值提取目标子数据集
Pandas按指定列非缺失值提取区间行并分割数据集
原始数据集
首先创建并查看原始DataFrame:
import pandas as pd import numpy as np column1 = [None,None,None,4,8,9,None,None,None,2,3,5,None] column2 = [None,None,None,None,5,1,None,None,6,3,3,None,None] column3 = [None,None,None,3,None,7,None,None,7,None,None,1,None] df = pd.DataFrame(np.column_stack([column1, column2,column3]),columns=['column1', 'column2', 'column3']) print(df)
输出结果:
column1 column2 column3 0 None None None 1 None None None 2 None None None 3 4 None 3 4 8 5 None 5 9 1 7 6 None None None 7 None None None 8 None 6 7 9 2 3 None 10 3 3 None 11 5 None 1 12 None None None
需求
以column3的非缺失值作为起止标记,提取相邻标记之间(包含标记行)的所有行,同时移除全空行,最终分割为两个子数据集。
解决方案
通过标记非缺失位置、生成分组键、筛选有效分组来实现:
# 标记column3的非缺失行 mask = df['column3'].notna() # 生成分组键:每遇到一个非缺失值就递增分组编号 group_key = mask.cumsum() # 过滤掉全空的分组,并重置每个分组的索引 valid_groups = [group.reset_index(drop=True) for _, group in df.groupby(group_key) if not group.isna().all().all()] # 拆分得到目标子数据集 df1, df2 = valid_groups[0], valid_groups[1]
最终结果
打印df1:
column1 column2 column3 0 4 None 3 1 8 5 None 2 9 1 7
打印df2:
column1 column2 column3 0 None 6 7 1 2 3 None 2 3 3 None 3 5 None 1
内容的提问来源于stack exchange,提问作者CAA
相关产品推荐
相关产品推荐

