Python按poi分组取每组2行 提取地址左起公共前缀的实现方法
Pandas 分组提取地址最长公共前缀解决方案
需求1:过滤分组数据说明
你编写的过滤代码逻辑正确,可直接使用:先保留所有poi列重复出现的记录(即对应分组记录数≥2),再按poi分组每组取前2行后重置索引。
对应代码如下:
import pandas as pd # 读取测试数据后执行过滤 df = df[df['poi'].duplicated(keep=False)] df_filtered = df.groupby('poi').head(2).reset_index(drop=True)
需求2:提取分组左侧最长公共地址
无需额外安装第三方Python包,通过Pandas结合自定义函数即可实现。核心逻辑为:先定义求字符串列表最长公共前缀的工具函数,再按poi分组对地址字段应用该函数。
公共前缀工具函数定义
def get_longest_common_prefix(str_list): # 过滤空值避免运行报错 str_list = [s for s in str_list if pd.notna(s)] if not str_list: return "" # 公共前缀长度不可能超过列表中最短的字符串长度,以此为基准遍历 min_len = min(len(s) for s in str_list) for i in range(min_len): current_char = str_list[0][i] # 校验所有字符串第i位是否一致 for s in str_list[1:]: if s[i] != current_char: # 遇到不一致的字符,返回前i位的公共部分 return str_list[0][:i] # 所有字符均一致,返回最短字符串即可 return str_list[0][:min_len]
分组计算得到结果
result = df_filtered.groupby('poi', as_index=False)['address'].agg( common_address=get_longest_common_prefix )
运行后输出的result即可匹配你提供的预期输出格式。
内容的提问来源于stack exchange,提问作者ah bon
相关产品推荐
相关产品推荐

