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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 18:15:08