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

如何优化Pandas分组拼接列并填充组内NaN为公共值的代码?

问题:按分组拼接列并填充组内NaN值

输入数据 df1

A        B        C          D  E   F   G
Messi   Forward   Argentina  1  Nan 5   6
Ronaldo Defender  Portugal  Nan 4   Nan 3
Messi   Midfield  Argentina Nan 5   Nan 6
Ronaldo Forward   Portugal   3  Nan 2   3
Mbappe  Forward   France    1   3   2   5

预期输出 df

A         B                   C         D   E   F   G
Messi   Forward,Midfield    Argentina   1   5   5   6
Ronaldo Forward,Defender    Portugal    3   4   2   3
Mbappe  Forward               France    1   3   2   5

当前尝试代码

df.groupby(['A','C'])['B'].agg(','.join).reset_index()
df.fillna(method='ffill')

需求说明

按A、C列分组,拼接B列的所有取值;同时将D、E、F、G列中的NaN填充为组内的公共有效值(组内非NaN的唯一值)。

更优实现方式

可以通过一次groupby聚合操作完成所有需求,避免多次处理数据框:

import pandas as pd

# 假设已加载输入数据到df1
df_result = df1.groupby(['A', 'C'], as_index=False).agg(
    # 拼接B列的取值
    B=('B', ','.join),
    # 对其他列取组内第一个非NaN值(组内有效值唯一)
    D=('D', lambda x: x.dropna().iloc[0]),
    E=('E', lambda x: x.dropna().iloc[0]),
    F=('F', lambda x: x.dropna().iloc[0]),
    G=('G', lambda x: x.dropna().iloc[0])
)

说明

  • 这种方式将分组拼接和NaN填充合并为一步操作,效率更高,逻辑更清晰。
  • 由于D/E/F/G列在每个分组内的有效值是唯一的,所以通过dropna()过滤NaN后取第一个值即可得到组内公共值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:15:32