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

基于列中重复值重塑Pandas DataFrame的方法

解决Pandas长表转宽表(同组数据横向拼接)的问题

嘿,我完全懂你想要的效果——把同一动物的多行记录合并成一行,每个原始字段带上序号后缀横向排列。这在Pandas里用分组+重塑的方法就能轻松实现,给你一步步拆解:

步骤1:构造示例数据(还原你的数据集)

先把你给出的数据集用Pandas构造出来,方便后续操作:

import pandas as pd

df = pd.DataFrame({
    'Animal': ['Cat', 'Cat', 'Cat', 'Dog', 'Dog', 'Dog'],
    'Age': [1, 2, 3, 1, 2, 3],
    'Color': ['Brown', 'White', 'Brown', 'White', 'White', 'White'],
    'Length': ['50cm', '60cm', '55cm', '99cm', '129cm', '105cm']
})

步骤2:给每组数据添加序号标记

咱们需要给每个Animal组内的行分配一个从1开始的序号,这样后续才能生成Age_1、Color_2这类带序号的列名:

# 按Animal分组,给每组内的行计数(默认从0开始),加1让序号从1起步
df['group_idx'] = df.groupby('Animal').cumcount() + 1

步骤3:重塑数据为宽表格式

用pivot方法把长表转成宽表,再整理列名:

# 以Animal为索引,group_idx为列,其余字段为值进行重塑
wide_df = df.pivot(index='Animal', columns='group_idx')

# 把多级列名(比如('Age', 1))合并成"字段名_序号"的格式
wide_df.columns = [f'{col_name}_{idx}' for col_name, idx in wide_df.columns]

# 重置索引,让Animal从索引变回普通列
wide_df = wide_df.reset_index()

最终效果

运行完上面的代码后,wide_df就会变成你想要的格式:

AnimalAge_1Color_1Length_1Age_2Color_2Length_2Age_3Color_3Length_3
Cat1Brown50cm2White60cm3Brown55cm
Dog1White99cm2White129cm3White105cm

补充说明

如果你的数据集里存在组内行数不一致的情况(比如有的动物只有2条记录),pivot会自动用NaN填充缺失的位置,要是想指定填充值,可以在pivot里加fill_value参数,比如:

wide_df = df.pivot(index='Animal', columns='group_idx', fill_value='无数据')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:57:39