拆分Pandas列并按月份分组统计拆分值生成新列
按月份统计错误类型并重塑DataFrame
核心步骤
- 统一日期格式为年月(如
2020-01),作为分组依据 - 以年月为行、错误类型为列,统计各类型错误的月度数量
完整代码实现
先导入依赖并重构示例数据:
import pandas as pd from pandas import Timestamp # 重构用户提供的示例数据 data = pd.DataFrame({ 'Error \nNumber': {0: '2122', 1: '2123', 2: '2124', 3: '2125', 4: '2126'}, 'Date': {0: Timestamp('2020-01-09 00:00:00'), 1: Timestamp('2020-01-09 00:00:00'), 2: Timestamp('2020-02-09 00:00:00'), 3: Timestamp('2020-03-09 00:00:00'), 4: Timestamp('2020-04-09 00:00:00')}, 'Type of error ': {0: 'NHS Spine check - External error', 1: 'EP3- Run failure', 2: 'NHS Spine check - External error', 3: 'NHS Spine check - External error', 4: 'NHS Spine check - External error'} })
执行数据处理:
# 1. 将日期转换为年月格式(字符串类型,方便展示) data['Date'] = data['Date'].dt.strftime('%Y-%m') # 2. 用透视表统计月度错误数量 result = pd.pivot_table( data, index='Date', columns='Type of error ', values='Error \nNumber', # 选任意列用于计数,这里用错误编号 aggfunc='count', fill_value=0 # 空值填充为0 ).reset_index() # 可选:清理列名的多余空格 result.columns = ['Date'] + [col.strip() for col in result.columns[1:]] print(result)
输出示例
Date NHS Spine check - External error EP3- Run failure 0 2020-01 1 1 1 2020-02 1 0 2 2020-03 1 0 3 2020-04 1 0
补充说明
- 若需保留
Period类型的年月(而非字符串),可替换日期处理代码为data['Date'] = data['Date'].dt.to_period('M') aggfunc='count'可替换为len,效果一致;如果需要去重统计错误编号,可改用aggfunc='nunique'- 透视表会自动识别所有错误类型并生成对应列,无需手动指定
内容的提问来源于stack exchange,提问作者Manolo Dominguez Becerra
相关产品推荐
相关产品推荐

