如何将DataFrame划分为无缺失值且索引连续的子DataFrame?
解决方案
代码实现
定义一个函数提取DataFrame中连续非缺失值的子块:
import pandas as pd def extract_non_na_blocks(df): # 标记所有非缺失值的行 non_na_rows = df['Value'].notna() # 为连续的非缺失值块分配唯一组ID block_group_ids = df['Value'].isna().cumsum()[non_na_rows] # 按组ID拆分,提取每个非缺失值子块 return [df.loc[non_na_rows & (block_group_ids == group_id)] for group_id in block_group_ids.unique()]
使用示例
- 构造目标原始DataFrame:
df = pd.DataFrame({ 'Value': ['A', 'B', pd.NA, pd.NA, 'C', pd.NA] })
- 调用函数获取子DataFrame:
# 获取两个子块 first_block, second_block = extract_non_na_blocks(df) # 查看第一个子块 print(first_block) # 输出结果: # Value #0 'A' #1 'B' # 查看第二个子块 print(second_block) # 输出结果: # Value #4 'C'
逻辑说明
- 用
notna()筛选出所有非缺失值的行; - 通过
isna().cumsum()给每个缺失值位置递增计数,让连续的非缺失值归为同一组; - 遍历每个唯一组ID,筛选对应行得到独立的子DataFrame。
内容的提问来源于stack exchange,提问作者Lay González
相关产品推荐
相关产品推荐

