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

如何使用Pandas将频率表还原为整洁格式数据

解决方法:用melt+repeat还原计数型宽表为整洁数据

嘿,这个需求我太熟了!要把这种按计数存储的宽表转成每行对应一个实例的整洁格式,用pandas的melt配合索引重复就能一步到位,代码简洁又高效。

完整实现代码

import pandas as pd

# 初始化你的数据
data = [[1,1,2,3], [1,2,3,5], [2,1,6,1], [2,2,2,4]]
df = pd.DataFrame(data, columns=['id', 'time', 'CountX1', 'CountX2'])

# 核心链式操作
clean_df = (
    # 第一步:把宽表转成长表,提取变量名和对应计数
    df.melt(id_vars=['id', 'time'], 
            var_name='variable', 
            value_name='count')
    # 第二步:根据计数值重复每一行
    .loc[lambda x: x.index.repeat(x['count'])]
    # 第三步:删除不需要的计数列
    .drop('count', axis=1)
    # 第四步:重置索引,得到干净的结果
    .reset_index(drop=True)
    # 可选:把variable列的"Count"前缀去掉,变成你要的X1/X2
    .assign(variable=lambda x: x['variable'].str.replace('Count', ''))
)

print(clean_df)

步骤拆解

  • melt转长表:id_vars指定要保留的标识列(id和time),var_name把原来的列名(CountX1/CountX2)存到variable列,value_name把对应的计数值存到count列,这一步先把宽表结构拆成便于处理的长表。
  • repeat重复行:利用index.repeat(x['count']),让每一行根据自己的计数值重复对应次数,比如原来CountX1=2的行,会被复制2次。
  • 清理列和索引:删掉没用的count列,再重置索引,避免重复索引的问题。
  • 可选的变量名优化:用str.replace把variable列的"Count"前缀去掉,正好得到你要的X1/X2格式。

运行后得到的结果完全符合你要求的整洁数据格式,每一行对应一个实例,完美还原计数信息~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:30:03