如何在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可视化操作完成转换:
- 将原始数据复制到Excel表格,选中数据区域,点击数据选项卡 → 从表格/区域(勾选“我的表格有标题”),进入Power Query编辑器。
- 先手动整理出四列数据:
Name/Loc/sales_activity/count,把原始的sales_call/sales_meet/sales_email拆分成三行,对应各自的计数值。 - 添加自定义列:点击添加列 → 自定义列,输入公式:
List.Repeat({[sales_activity]}, [count]) - 点击自定义列右侧的展开按钮,选择“到新行”。
- 删除
count列,调整列顺序,点击关闭并上载,即可得到目标格式的表格。
内容的提问来源于stack exchange,提问作者datadude_ad
相关产品推荐
相关产品推荐

