Pandas分组(Groupby)后如何添加唯一地址列及最大Site#列?
解决方法
你可以通过两种方式实现分组内唯一地址的列添加:
方法1:使用transform结合lambda函数
直接对分组后的Address列使用transform,先提取唯一值再用逗号拼接成字符串:
import pandas as pd # 构造测试DataFrame data = { 'District#': [1, 1, 2, 2], 'Site#': [1, 2, 36, 44], 'Address': ['123 Bayview Ln', '456 Example St', '789 Hello Dr', '789 Hello Dr'] } df = pd.DataFrame(data) # 添加MaxSite#列(你已实现的代码) df['MaxSite#'] = df.groupby('District#')['Site#'].transform('max') # 添加分组内唯一地址列 df['All District Addresses'] = df.groupby('District#')['Address'].transform(lambda x: ','.join(x.unique()))
之前用transform('unique')返回的是数组类型,无法直接作为列值展示,用join转换成字符串后就能正常填充到每一行,避免维度不匹配问题。
方法2:先聚合再合并
先分组聚合得到每个District对应的唯一地址字符串,再通过merge合并回原DataFrame:
# 构造测试DataFrame(同上) data = { 'District#': [1, 1, 2, 2], 'Site#': [1, 2, 36, 44], 'Address': ['123 Bayview Ln', '456 Example St', '789 Hello Dr', '789 Hello Dr'] } df = pd.DataFrame(data) # 添加MaxSite#列 df['MaxSite#'] = df.groupby('District#')['Site#'].transform('max') # 聚合得到每个District的唯一地址字符串 district_addrs = df.groupby('District#')['Address'].unique().apply(lambda x: ','.join(x)).reset_index(name='All District Addresses') # 合并回原DataFrame df = df.merge(district_addrs, on='District#')
两种方法都能得到你期望的输出结果,可根据实际场景选择。
内容的提问来源于stack exchange,提问作者Bijan
相关产品推荐
相关产品推荐

