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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:39:02