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

如何用Pandas转换含分类与时间戳的新冠数据适配Tableau

新冠数据宽表转长表(适配Tableau)

需求说明

现有新冠相关数据,前4列为分类列:['Type 1 Acute?', 'NHS England Region', 'Code', 'Name'],剩余250列为时间戳格式的日期列(如2020-08-01 00:00:00)。需要将日期列转换为行,同时保留分类列作为列,目标结构如下:

Type 1 Acute?  NHS England Region      Code  Name
2020-08-01 No             East of England.        8D379 CARETECH COMMUNITY SERVICES

当前数据结构(省略部分日期列):

Type 1 Acute?   NHS England Region  Code    Name    2020-08-01 00:00:00 2020-08-02 00:00:00 ... 2021-04-06 00:00:00
9   No  East of England 8D379   CARETECH COMMUNITY SERVICES LTD 0.0 0.0 ... 0.0
10  No  East of England AND01   BADDOW HOSPITAL 0.0 0.0 ... NaN
11  No  East of England AVQ03   ONE HATFIELD HOSPITAL   0.0 0.0 ... NaN
12  No  East of England AWR01   ONE STOP DOCTORS LTD (ONE MEDICAL HOUSE)    0.0 0.0 ... NaN
13  No  East of England DE8 ELYSIUM HEALTHCARE  0.0 0.0 ... 0.0

解决方案

用Pandas的melt方法可直接实现宽表转长表,步骤如下:

  1. 导入Pandas库:
import pandas as pd
  1. 读取数据(根据实际存储路径调整):
df = pd.read_csv("your_data.csv")
  1. 执行宽转长操作,明确区分分类列和日期列:
# 定义分类列列表
id_cols = ['Type 1 Acute?', 'NHS England Region', 'Code', 'Name']
# 自动提取所有日期列
date_cols = [col for col in df.columns if col not in id_cols]

# 转换数据结构
melted_df = df.melt(
    id_vars=id_cols,
    value_vars=date_cols,
    var_name='Date',
    value_name='Value'
)
  1. (可选)调整日期格式并设置为索引,匹配目标结构:
# 去除日期列的时间部分,转为纯日期格式
melted_df['Date'] = pd.to_datetime(melted_df['Date']).dt.date
# 将日期设为索引
melted_df.set_index('Date', inplace=True)

转换后的数据会以日期为索引,每一行对应一个「日期+分类组合」,完美适配Tableau的可视化需求。相比stack,melt更适合这种明确区分分类列和值列的场景,逻辑更直观,不易出错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 08:48:21