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

如何在Pandas或Python中将CrossTab交叉表转换为普通DataFrame

交叉表转目标DataFrame实现方法(基于Python pandas)


前置准备

首先将原始交叉表读入为pandas DataFrame,设置第一列的分类(Intermittent、Lumpy、Unknown)为行索引,顶部的四个分类(Erratic、Intermittent、Lumpy、Smooth)为列名。如果是从本地csv读取可以直接用以下代码:

import pandas as pd
# 读入外部文件时指定第一列为索引
df_crosstab = pd.read_csv('你的文件路径.csv', index_col=0)

如果是手动构造测试数据,可以用以下代码:

df_crosstab = pd.DataFrame(
    data=[
        [20, 77, 9, 450],
        [10, 6, 1, 13],
        [0, 13, 1, 1]
    ],
    index=['Intermittent', 'Lumpy', 'Unknown'],
    columns=['Erratic', 'Intermittent', 'Lumpy', 'Smooth']
)

实现方式1:stack() 方法(代码最简洁)

stack()会直接把列名转为内层索引,再重置索引就能得到长格式结果:

df_result = df_crosstab.stack().reset_index()
# 按要求重命名列
df_result.columns = ['1', '2', 'Value']

实现方式2:melt() 方法(更灵活可控)

如果需要自定义排序、过滤逻辑,用melt()更方便:

df_result = df_crosstab.reset_index().melt(
    id_vars='index',
    var_name='2',
    value_name='Value'
).rename(columns={'index':'1'})
# 如需和示例完全一致的排序规则,加一行排序代码
df_result = df_result.sort_values(by=['2', '1']).reset_index(drop=True)

两种方法输出的结果和你给出的预期格式完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:54:06