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

如何透视DataFrame并将表头转为行,实现按企业查询在售产品

Pandas宽表转长表实现企业在售产品数据重构

问题背景

现有记录企业在售产品及供应商的数据集,原始结构如下:

Product  Supplier Company1 Company2
0        1         1        x      NaN
1        2         2      NaN        x
2        3         3      NaN       vx
3        4         4       fx        x

构造该数据的Pandas代码:

import pandas as pd

df = pd.DataFrame({
    "Product": [1,2,3,4],
    "Supplier": [1,2,3,4],
    "Company1": ['x',None, None, 'fx'],
    "Company2": [None, 'x', 'vx','x'],
})

需要将数据转换为可按企业名称查询在售产品的结构,期望输出:

Company  Product  Supplier Cells
0  Company1        1         1     x
1  Company1        4         4    fx
2  Company2        2         2     x
3  Company2        3         3    vx
4  Company2        4         4     x

此前尝试pd.merge和pd.pivot未成功,不清楚如何将表头转为行,寻求实现方法。

解决方法

这是典型的宽表转长表需求,使用Pandas的melt()函数即可高效实现,具体步骤:

  1. 调用melt函数,指定id_vars为不需要转换的核心列(Product、Supplier),将企业列转为行数据,同时定义新列名;
  2. 过滤掉Cells列为NaN的行(对应企业未售卖的产品);
  3. 重置索引保证连续性。

完整代码:

import pandas as pd

df = pd.DataFrame({
    "Product": [1,2,3,4],
    "Supplier": [1,2,3,4],
    "Company1": ['x',None, None, 'fx'],
    "Company2": [None, 'x', 'vx','x'],
})

# 执行宽转长转换
transformed_df = df.melt(
    id_vars=['Product', 'Supplier'],
    var_name='Company',
    value_name='Cells'
)

# 过滤无效数据并重置索引
final_df = transformed_df.dropna(subset=['Cells']).reset_index(drop=True)

print(final_df)

运行后输出与期望格式完全匹配:

Company  Product  Supplier Cells
0  Company1        1         1     x
1  Company1        4         4    fx
2  Company2        2         2     x
3  Company2        3         3    vx
4  Company2        4         4     x

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 02:33:10