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

如何在Pandas/Python中将含数值的列转为长格式行

宽表转长表:按销售活动计数展开行

原始数据

Name   Loc    sales_call    sales_meet    sales_email
A      Region  2             2             2
B      Local   1             2             2

目标结果

Name  Loc    sales_activity
A     Region  call
A     Region  call
A     Region  meet
A     Region  meet
A     Region  email
A     Region  email
B     Local   call
B     Local   meet
B     Local   meet
B     Local   email
B     Local   email

解决方案1:Python Pandas

用Pandas的melt函数将宽表转长表,再通过索引重复实现按计数展开行:

import pandas as pd

# 加载原始数据(实际场景可通过pd.read_csv读取)
df = pd.DataFrame({
    'Name': ['A', 'B'],
    'Loc': ['Region', 'Local'],
    'sales_call': [2, 1],
    'sales_meet': [2, 2],
    'sales_email': [2, 2]
})

# 1. 宽表转长表,提取活动类型和计数
melted = df.melt(
    id_vars=['Name', 'Loc'],
    var_name='sales_activity',
    value_name='count'
)

# 2. 去除活动名称前缀,保留call/meet/email
melted['sales_activity'] = melted['sales_activity'].str.replace('sales_', '')

# 3. 按计数值重复行,清理冗余列
result = melted.loc[melted.index.repeat(melted['count'])] \
               .drop('count', axis=1) \
               .reset_index(drop=True)

print(result)

运行后直接输出目标格式的DataFrame,可通过result.to_csv()导出为表格文件。


解决方案2:Excel Power Query

适合不熟悉代码的场景,用Power Query可视化操作完成转换:

  1. 将原始数据复制到Excel表格,选中数据区域,点击数据选项卡 → 从表格/区域(勾选“我的表格有标题”),进入Power Query编辑器。
  2. 先手动整理出四列数据:Name/Loc/sales_activity/count,把原始的sales_call/sales_meet/sales_email拆分成三行,对应各自的计数值。
  3. 添加自定义列:点击添加列 → 自定义列,输入公式:
    List.Repeat({[sales_activity]}, [count])
    
  4. 点击自定义列右侧的展开按钮,选择“到新行”。
  5. 删除count列,调整列顺序,点击关闭并上载,即可得到目标格式的表格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:25:17