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

如何将含月份事件状态的数据集转换为保留Null值的交叉频数矩阵?

宽格式事件数据转交叉频次矩阵实现方案

原始数据集

idjanuaryfebruarymarchapril
1scheduleddonenulldone
2scheduledscheduleddone
3ongoingcanceledscheduled

目标交叉(列联)矩阵

eventjanuaryfebruarymarchapril
scheduled2110
done0111
ongoing1000
null0002

实现代码(Python pandas)

import pandas as pd

# 构造原始数据
data = {
    'id': [1, 2, 3],
    'january': ['scheduled', 'scheduled', 'ongoing'],
    'february': ['done', 'scheduled', 'canceled'],
    'march': ['null', 'done', 'scheduled'],
    'april': ['done', '', '']
}
df = pd.DataFrame(data)

# 1. 统一空值标记:把空字符串和原有的'null'都转为统一的'null'
month_cols = ['january', 'february', 'march', 'april']
df[month_cols] = df[month_cols].replace({'': 'null', 'null': 'null'})

# 2. 宽表转长表,保留月份和对应事件
melted_df = df.melt(id_vars='id', value_vars=month_cols, var_name='month', value_name='event')

# 3. 按事件和月份分组统计频次,然后转成宽表,缺失值填0
cross_matrix = melted_df.groupby(['event', 'month']).size().unstack(fill_value=0)

# 4. 按目标顺序调整列和行(可选,确保和目标矩阵一致)
target_events = ['scheduled', 'done', 'ongoing', 'null']
cross_matrix = cross_matrix.reindex(target_events)[month_cols]

print(cross_matrix)

代码说明

  • 统一空值:把原始数据里的空字符串(比如id2、3的april列)和写为'null'的单元格统一标记为'null',保证统计口径一致
  • 宽转长:把每个月份列拆成"月份-事件"的行记录,方便后续分组统计
  • 分组统计:通过groupby+size统计每个事件在对应月份的出现次数,再用unstack转回宽表,缺失的组合用0填充
  • 顺序调整:如果需要和目标矩阵的行、列顺序完全一致,用reindex调整即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:53:21