Pandas如何通过groupby处理分组首行填充并转换表结构
解决方法
核心思路:先按record_id分组填充缺失的name值,再筛选出有效数据行即可,可适配多列类似data的场景。
完整可运行代码
import pandas as pd # 原始导入数据 data = {'record_id':[1,1,1,1,2,2,3,3,3], 'name':['AA',"","","",'BB',"",'CC',"",""], 'data':["",'foo1','foo2','foo3',"",'foo4',"",'foo5','foo6']} df = pd.DataFrame(data) # 1. 将空字符串转为NA格式方便后续处理 df = df.replace("", pd.NA) # 2. 按record_id分组,将同组内第一个有效name值填充到所有行 df["name"] = df.groupby("record_id")["name"].ffill() # 3. 筛选data列有有效值的行,保留需要的字段并重置索引 df_out = df[df["data"].notna()][["name", "data"]].reset_index(drop=True) print(df_out)
运行后输出和你要求的结果完全一致。
多data类列适配方案
如果存在多个类似data的字段(如data1/data2/data3),只需调整筛选逻辑即可:
# 定义所有data类列名 data_cols = ["data1", "data2", "data3"] # 筛选任意一个data类列有有效值的行 df_out = df[df[data_cols].notna().any(axis=1)][["name"] + data_cols].reset_index(drop=True)
内容的提问来源于stack exchange,提问作者Liz Z
相关产品推荐
相关产品推荐

