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
相关产品推荐
相关产品推荐

