如何从Pandas DataFrame中提取客户访问链及其频率

来源:程序开发作者:深圳SEO公司头衔:草根站长
导读:本期聚焦于小伙伴创作的《如何从Pandas DataFrame中提取客户访问链及其频率》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何从Pandas DataFrame中提取客户访问链及其频率》有用,将其分享出去将是对创作者最好的鼓励。

在用户行为分析、电商运营等场景中,我们常常需要从存储了用户访问记录的数据集中,提取每个客户的完整访问链,并统计不同访问链的出现频率,以此分析用户的访问偏好和路径特征。本文将以Pandas为核心工具,一步步讲解完整的实现流程。

如何从Pandas DataFrame中提取客户访问链及其频率

数据准备与预处理

首先我们需要构造或加载原始的用户访问数据,通常原始数据会包含客户ID、访问的页面标识、访问时间这三个核心字段。如果原始数据中存在缺失值或者时间格式不规范的情况,需要先进行处理。

示例的原始数据格式如下:

import pandas as pd

# 构造示例数据
data = {
    'customer_id': ['c001', 'c001', 'c001', 'c002', 'c002', 'c003', 'c003', 'c003', 'c003'],
    'page': ['home', 'product', 'cart', 'home', 'search', 'home', 'product', 'product', 'cart'],
    'visit_time': [
        '2024-05-01 10:00:00', '2024-05-01 10:02:00', '2024-05-01 10:05:00',
        '2024-05-01 11:00:00', '2024-05-01 11:03:00',
        '2024-05-01 12:00:00', '2024-05-01 12:02:00', '2024-05-01 12:04:00', '2024-05-01 12:06:00'
    ]
}
df = pd.DataFrame(data)
# 将visit_time转换为datetime类型,方便后续排序
df['visit_time'] = pd.to_datetime(df['visit_time'])
print(df)

按客户分组并排序访问记录

要生成每个客户的访问链,首先需要按照客户ID分组,然后在每个分组内部按照访问时间升序排列,确保访问链的顺序和实际访问顺序一致。

# 按照customer_id分组,组内按照visit_time升序排序
df_sorted = df.sort_values(by=['customer_id', 'visit_time'])
print(df_sorted)

生成客户访问链

排序完成后,我们按客户ID分组,将每个客户对应的页面标识拼接成字符串,作为该客户的访问链。这里使用groupby结合agg方法实现,拼接符可以选择箭头、大于号等,方便后续查看。

# 生成访问链,用 -> 作为页面之间的分隔符
customer_chains = df_sorted.groupby('customer_id')['page'].agg(lambda x: ' -> '.join(x)).reset_index()
customer_chains.columns = ['customer_id', 'visit_chain']
print(customer_chains)

统计访问链频率

得到所有客户的访问链之后,我们可以通过统计visit_chain列的取值分布,得到不同访问链的出现频率,还可以按照频率降序排列,快速找到最热门的访问路径。

# 统计访问链频率
chain_freq = customer_chains['visit_chain'].value_counts().reset_index()
chain_freq.columns = ['visit_chain', 'frequency']
# 按照频率降序排列
chain_freq = chain_freq.sort_values(by='frequency', ascending=False)
print(chain_freq)

完整流程整合

如果需要将整个流程整合为可复用的函数,可以参考以下代码:

def extract_visit_chain_and_freq(df, customer_col='customer_id', page_col='page', time_col='visit_time', sep=' -> '):
    """
    从DataFrame中提取客户访问链及其频率
    :param df: 原始数据DataFrame
    :param customer_col: 客户ID列名
    :param page_col: 访问页面列名
    :param time_col: 访问时间列名
    :param sep: 访问链页面分隔符
    :return: 访问链频率统计DataFrame
    """
    # 时间格式转换
    df[time_col] = pd.to_datetime(df[time_col])
    # 排序
    df_sorted = df.sort_values(by=[customer_col, time_col])
    # 生成访问链
    customer_chains = df_sorted.groupby(customer_col)[page_col].agg(lambda x: sep.join(x)).reset_index()
    customer_chains.columns = [customer_col, 'visit_chain']
    # 统计频率
    chain_freq = customer_chains['visit_chain'].value_counts().reset_index()
    chain_freq.columns = ['visit_chain', 'frequency']
    return chain_freq.sort_values(by='frequency', ascending=False)

# 调用函数测试
result = extract_visit_chain_and_freq(df)
print(result)

注意事项

在实际业务中需要注意几个问题,首先是访问时间的准确性,如果存在同一客户同一时间多次访问的情况,可能需要额外增加排序维度,比如访问记录的ID。其次如果页面标识存在重复值,比如同一个页面连续访问多次是否需要合并,需要根据业务需求调整拼接逻辑,比如可以在拼接前对连续重复的页面去重。最后如果数据量较大,分组操作可以考虑使用sort=False参数提升性能,但需要提前确保数据已经按分组字段排序完成。

PandasDataFrame客户访问链访问频率数据处理修改时间:2026-06-25 16:18:45

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。