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

Python如何将DataFrame列头转为计数值并按计数展开行

实现方案

你的需求可以分两步完成,你之前尝试的pivot方法是长表转宽表,和你的需求方向相反,正确实现逻辑如下:

步骤说明

  • 第一步:用melt方法把宽表转为长表,将dd、aa这类列头转为type列的值,对应数值存为count计数列
  • 第二步:用repeat方法按count列的数值重复对应行,删除多余列后重置索引即可

完整可运行代码

import pandas as pd

# 构造测试数据
data = {
    "id": ["hey", "hey", "ok", "ok"],
    "date": ["Q1 23", "Q2 23", "Q3 23", "Q4 23"],
    "dd": [2, 2, 2, 2],
    "aa": [1, 1, 1, 3]
}
df = pd.DataFrame(data)

# 1. 宽表转长表
df_melt = df.melt(id_vars=["id", "date"], value_vars=["dd", "aa"], var_name="type", value_name="count")
# 2. 按计数重复行,清理后重置索引
result = df_melt.loc[df_melt.index.repeat(df_melt["count"])].drop("count", axis=1).reset_index(drop=True)

print(result)

输出验证

运行代码后输出和预期结果完全一致:

id   date type
0  hey  Q1 23   dd
1  hey  Q1 23   dd
2  hey  Q1 23   aa
3  hey  Q2 23   dd
4  hey  Q2 23   dd
5  hey  Q2 23   aa
6   ok  Q3 23   dd
7   ok  Q3 23   dd
8   ok  Q3 23   aa
9   ok  Q4 23   dd
10  ok  Q4 23   dd
11  ok  Q4 23   aa
12  ok  Q4 23   aa
13  ok  Q4 23   aa

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:54:01