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

Python Pandas:基于相同Source、Level、County列值合并Town列取值

解决方案

直接使用groupby分组聚合即可实现需求,核心要注意开启dropna=False保证空值参与分组,避免时间行被丢弃:
首先是示例数据构造(你可以跳过这步直接用你自己的DataFrame):

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'Time': ['2021-12-01 10:01:41.443', np.nan, np.nan, np.nan, '2021-12-01 10:01:46.452'],
    'Source': [np.nan, 'Test', 'Test', 'Test', np.nan],
    'Level': [np.nan, '3', '5-', '5-', np.nan],
    'County': [np.nan, 'C1', 'C2', 'C2', np.nan],
    'Town': [np.nan, 'C1-T1', 'C2-T0', 'C2-T1', np.nan]
})

核心实现代码:

res = df.groupby(
    # 分组键包含Time是为了让带时间的行单独成组,保留原有位置
    ['Time', 'Source', 'Level', 'County'],
    dropna=False,  # 必须开启,否则含NaN的分组会被直接丢弃
    as_index=False,
    sort=False  # 关闭自动排序,完全保留原始数据的行顺序
)['Town'].agg(
    # 同分组先去重再用英文逗号拼接
    lambda x: ', '.join(pd.unique(x))
)

补充说明

  • 即使所有字段都是字符串类型也完全兼容,不需要额外做类型转换
  • 如果不需要Town值去重,可以把聚合逻辑直接改成', '.join即可
  • 输出结果会完全保留原始时间行的顺序,和你期望的输出格式一致

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

相关产品推荐
方舟 Agent Plan

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

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