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

解决Pandas DataFrame分组聚合列表列插入后值为NaN的问题

问题:按'Melder'分组生成'SAG-Nummer'列表并添加为DataFrame新列失败

我尝试按Melder字段分组,生成对应SAG-Nummer的列表,再将该列表作为新列添加到原DataFrame中,但使用apply(list)配合insert()时无法正常工作。

现有代码及现象

  • 以下代码可生成仅包含分组值的新Series:
new_df2 = new_df.groupby('Melder')['SAG-Nummer'].apply(list)
  • 但使用insert()添加列时,新列所有值均为NaN:
my_df.insert(1,'Liste',my_df.groupby('Melder')['SAG-Nummer'].apply(list))
print(my_df)

输出结果:

SAG-Nummer Liste   Melder
0  SAG-2001-0389   NaN    Meyer
1  SAG-2001-0388   NaN    Meyer
2  SAG-2001-1833   NaN  Schmidt
3  SAG-2001-1836   NaN     Berg

而分组后的new_df2输出是正常的:

print(new_df2)

输出:

Melder
Berg                      [SAG-2001-1836]
Meyer      [SAG-2001-0389, SAG-2001-0388]
Schmidt                   [SAG-2001-1833]

预期结果

SAG-Nummer Liste                            Melder
0  SAG-2001-0389   [SAG-2001-0389, SAG-2001-0388] Meyer
1  SAG-2001-0388   [SAG-2001-0389, SAG-2001-0388] Meyer
2  SAG-2001-1833   [SAG-2001-1833]                Schmidt
3  SAG-2001-1836   [SAG-2001-1836]                Berg

解决方案

问题出在索引不匹配:groupby().apply(list)返回的Series以Melder的值为索引,而原DataFrame用的是默认数字索引,直接插入会因索引无法对应导致赋值为NaN。

改用transform()替代apply()即可解决,transform()会将分组结果广播到原DataFrame的每一行,保持索引一致:

直接添加新列

my_df['Liste'] = my_df.groupby('Melder')['SAG-Nummer'].transform(list)

指定位置插入新列

# 先计算分组后的列表列
liste_col = my_df.groupby('Melder')['SAG-Nummer'].transform(list)
# 在第2列(索引1)插入新列
my_df.insert(1, 'Liste', liste_col)

运行上述代码后,即可得到预期的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 13:10:48