如何按列分组合并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
相关产品推荐
相关产品推荐

