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

如何用Pandas按administ_div、municipality分组并保留有效temp_id

Pandas分组聚合实现需求

问题描述

现有如下DataFrame:

temp_idadministrative_divmunicipalitycombine
1GunmaMaebashi
NaNGunmaMaebashiCC
NaNGunmaMaebashiDD
NaNGunmaMaebashiEE
2GunmaKiryuAA

需要按administrative_div、municipality分组,保留每组中非NaN的temp_id,将同组combine字段聚合为列表(多值时)或原值(单值时),得到目标结果:

temp_idadministrative_divmunicipalitycombine
1GunmaMaebashi[CC,DD,EE]
2GunmaKiryuAA

解决方案代码

import pandas as pd
import numpy as np

# 构造原始DataFrame
df = pd.DataFrame({
    'temp_id': [1, np.nan, np.nan, np.nan, 2],
    'administrative_div': ['Gunma']*5,
    'municipality': ['Maebashi']*4 + ['Kiryu'],
    'combine': ['', 'CC', 'DD', 'EE', 'AA']
})

# 定义聚合函数:处理combine字段,空值过滤后转列表或返回单值
def combine_agg(series):
    # 过滤空字符串和NaN
    filtered = series[series.notna() & (series != '')].tolist()
    if len(filtered) == 1:
        return filtered[0]
    return filtered

# 分组聚合
result_df = df.groupby(['administrative_div', 'municipality'], as_index=False).agg(
    temp_id=('temp_id', lambda x: x.dropna().iloc[0]),
    combine=('combine', combine_agg)
)

print(result_df)

代码说明

  • 构造原始数据:还原题目中的DataFrame,空值对应空字符串和np.nan。
  • 聚合函数combine_agg:先过滤combine字段里的空字符串和NaN,再根据过滤后的元素数量返回列表或单个值。
  • 分组聚合操作:按指定字段分组,temp_id取每组中非NaN的唯一值;combine用自定义函数完成聚合逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:35:40