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

如何使用Pandas将宽表按dog、cat两列转为长表并聚合为pet分类

pandas宽转长并按计数生成多行的实现方案

你当前使用melt的逻辑是正确的,只需要在其基础上追加过滤、按计数值重复行的操作即可。
repeat方法会按照传入的数值重复对应行数,刚好匹配“有3只狗就生成3行dog记录”的需求,过滤value=0的行是为了删除无对应宠物的无效记录。

完整实现代码如下:

示例数据构造(可跳过,直接替换为你自己的数据集即可)

import pandas as pd

df = pd.DataFrame({
    'user': ['tom', 'dick', 'harry', 'tina', 'donna', 'hannah'],
    'town': ['london', 'miami', 'paris', 'london', 'dallas', 'dallas'],
    'dog': [1,0,0,3,0,1],
    'cat': [1,1,0,0,1,0]
})

核心处理代码

# 宽转长,直接指定分类列名为pets
melted = pd.melt(df, id_vars=['user', 'town'], value_vars=['dog', 'cat'], var_name='pets')
# 过滤宠物数量为0的行,按数量重复行后删除数量列,重置索引
result = melted[melted['value'] > 0].repeat(melted['value']).drop(columns='value').reset_index(drop=True)

最终输出的result和你预期的结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:06:02