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

如何按列分组合并Pandas DataFrame行并统计地址数量?

Pandas分组聚合:合并地址并统计数量解决方案

嘿,作为Pandas初学者碰到这种分组处理的需求太正常啦,我来给你一步步拆解怎么实现~

首先咱们明确需求:按name列分组,把每组里所有的Address字段合并成一个字符串,同时统计每组的地址总数对吧?

第一步:先准备示例输入(你可以替换成自己的真实数据)

我先模拟一份测试数据,方便你理解:

import pandas as pd

# 模拟输入数据
df = pd.DataFrame({
    'name': ['Alice', 'Alice', 'Bob', 'Bob', 'Bob'],
    'Address': ['纽约第五大道', '洛杉矶日落大道', '伦敦牛津街', '巴黎香榭丽舍', '东京银座']
})

第二步:核心实现代码

用groupby配合agg聚合函数就能一次性搞定两个需求:

# 分组聚合操作
result_df = df.groupby('name').agg(
    # 合并地址,用逗号+空格分隔,新列名取merged_addresses
    merged_addresses=('Address', ', '.join),
    # 统计地址数量,新列名取address_count
    address_count=('Address', 'count')
).reset_index()

# 查看结果
print(result_df)

代码解释

  • groupby('name'):把数据按name列的相同值分成不同组,比如所有Alice的行一组,Bob的行一组
  • agg():聚合方法,允许你对同一组的同字段执行多个操作,这里我们对Address列做了两件事:
    • ', '.join:把组内所有地址字符串用「逗号+空格」连接成一个长字符串
    • 'count':统计组内Address的行数,也就是地址的总数量
  • reset_index():把分组用的name从索引变回普通列,让结果更符合日常表格的格式

示例输出

运行上面的代码后,你会得到这样的结果:

name                merged_addresses  address_count
0  Alice  纽约第五大道, 洛杉矶日落大道              2
1    Bob  伦敦牛津街, 巴黎香榭丽舍, 东京银座              3

额外扩展:如果地址有重复怎么办?

如果你的数据里同一个name可能有重复地址,想要去重后再合并和统计,可以把代码改成这样:

result_df = df.groupby('name').agg(
    merged_addresses=('Address', lambda x: ', '.join(x.unique())),
    address_count=('Address', 'nunique')
).reset_index()

这里用x.unique()去重后再合并,nunique()统计去重后的地址数量,更贴合实际场景~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:31:33