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

如何从Pandas DataFrame提取Ramirez相关的常见非重复事件序列?

提取高频事件序列并排除重复成对的实现方案

核心思路

  1. 清洗数据:过滤掉每个到访记录中的无效值(None),只保留有效事件序列。
  2. 生成有效事件对:遍历每个清洗后的序列,提取连续的事件对,同时跳过两个事件完全相同的成对(如C1,C1)。
  3. 统计与排序:统计每个事件对的出现频率,按频率从高到低排序输出。

完整代码实现

from collections import Counter

# 示例到访事件数据(若实际是Pandas DataFrame,可将df对应列转为列表传入)
visits = [
    ['C2', 'C4', 'C1', None, None],
    ['C2', 'C1', 'C2', None, None],
    ['C1', 'C3', 'C1', 'C2', 'C3'],
    ['C1', 'C2', 'C3', None, None]
]

# 1. 清洗数据:移除每个序列中的None
cleaned_sequences = [[evt for evt in seq if evt is not None] for seq in visits]

# 2. 生成符合要求的连续事件对
valid_pairs = []
for seq in cleaned_sequences:
    # 遍历序列生成相邻元素对,跳过重复成对
    for i in range(len(seq) - 1):
        current_pair = (seq[i], seq[i+1])
        if current_pair[0] != current_pair[1]:
            valid_pairs.append(current_pair)

# 3. 统计频率并按降序排序
pair_frequency = Counter(valid_pairs)
# 先按出现次数降序,次数相同时按事件对字典序排序
sorted_results = sorted(pair_frequency.items(), key=lambda x: (-x[1], x[0]))

# 输出结果
print("事件链频率排序(从高到低):")
for pair, count in sorted_results:
    print(f"{pair[0]},{pair[1]}: {count} 次")

针对Pandas DataFrame的适配

如果你的事件数据存储在Pandas DataFrame的某一列(比如列名为event_sequence),只需替换数据加载部分:

import pandas as pd

# 假设df是你的原始DataFrame
df = pd.read_csv("your_data.csv")  # 或其他方式加载数据
cleaned_sequences = [[evt for evt in seq if evt is not None] for seq in df['event_sequence'].tolist()]

运行示例输出

事件链频率排序(从高到低):
C1,C2: 3 次
C2,C3: 2 次
C2,C1: 2 次
C1,C3: 2 次
C2,C4: 1 次
C4,C1: 1 次
C3,C1: 1 次

内容的提问来源于stack exchange,提问作者slow_learner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:35:31