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

计算并绘制时间序列DataFrame中客户交互类型的滚动占比

滚动时间窗口内交互类型占比计算与可视化

1. 数据预处理

先把时间戳列转成datetime格式并设为DataFrame索引,这是后续滚动计算的基础:

import pandas as pd
import matplotlib.pyplot as plt

# 示例数据
data = {
    'interaction_type': ['Chat', 'Chat', 'Chat', 'Chat', 'Chat', 'Call', 'Chat', 'Email'],
    'timestamps': ['2017-05-01 00:00:01', '2017-05-01 00:00:04', '2017-05-01 00:00:15', '2017-05-01 00:00:15',
                   '2017-05-01 00:00:21', '2017-05-01 00:00:24', '2017-05-01 00:00:31', '2017-05-01 00:00:32']
}
df = pd.DataFrame(data)

# 转换时间戳格式并设置为索引
df['timestamps'] = pd.to_datetime(df['timestamps'])
df = df.set_index('timestamps')

2. 生成交互类型哑变量

用get_dummies把分类类型转成二进制列,方便后续统计各类型的出现次数:

df_dummies = pd.get_dummies(df['interaction_type'], dtype=int)

3. 滚动窗口计算占比

全程采用矢量化操作,避免循环,适配大数据集:

# 定义滚动时间窗口,比如'5s'、'10s'、'1min'
window_size = '5s'

# 计算窗口内各交互类型的累计数量
rolling_counts = df_dummies.rolling(window_size).sum()

# 计算窗口内总交互次数
rolling_total = rolling_counts.sum(axis=1)

# 计算各类型占比,加1e-10避免除以0的情况
rolling_ratios = rolling_counts.div(rolling_total + 1e-10, axis=0)

注:如果业务场景中滚动窗口不可能为空,可以去掉+1e-10。

4. 绘制可视化曲线

把各类型的滚动占比和时间戳绘在同一张图中:

plt.figure(figsize=(10, 6))
# 遍历每个交互类型,绘制曲线
for interaction_type in rolling_ratios.columns:
    plt.plot(rolling_ratios.index, rolling_ratios[interaction_type], label=interaction_type)

plt.xlabel('时间戳')
plt.ylabel('滚动占比')
plt.title(f'{window_size}滚动窗口内交互类型占比')
plt.legend()
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

核心优势

  • 完全依赖pandas原生矢量化运算,处理百万级数据集效率极高
  • 支持任意时间格式的滚动窗口(秒、分钟、小时等)
  • 自动处理重复时间戳的情况,无需额外逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:22:31