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

pandas按条件groupby拼接:非空class对应分组Name合并问题

问题原因分析

你写的代码出现长度不匹配的核心原因是groupby.apply返回的结果长度等于分组数量(你的示例里是2组),而你赋值的左侧是原DataFrame中class非空的行,两者索引无法对齐,因此赋值失败。

正确实现代码

第一步:构造测试数据

import pandas as pd

df = pd.DataFrame({
    "Name": ["kumar", "ram", "ravi", "tej", "om"],
    "class": ["", "10", "", "", "12"],
    "score": ["", "14", "", "", "15"]
})

第二步:按规则分组并聚合

你之前创建分组列g1的逻辑是正确的,遇到非空class就累加分组编号,每个分组正好覆盖从上个非空class之后到当前非空class的所有行,后续直接对分组聚合即可:

# 生成分组编号
df["g1"] = df["class"].ne("").cumsum()

# 分组聚合:Name拼接,class和score取每组的非空值
result = df.groupby("g1", as_index=False).agg(
    Name=("Name", "".join),
    class_=("class", "max"),
    score=("score", "max")
).rename(columns={"class_": "class"}).drop(columns="g1")

输出结果

打印result即可得到你需要的目标格式:

Name class score
0  kumarram    10    14
1 ravit ejom    12    15

补充说明

如果你的数据中空值是NaN而不是空字符串"",只需要把df["class"].ne("")替换为df["class"].notna()即可。

内容的提问来源于stack exchange,提问作者Pyd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:45:03