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

如何在Pandas中将隔行转为列并以下一行作为对应值?

Pandas DataFrame 产品类型转宽表解决方案

原始数据

import pandas as pd

df = pd.DataFrame.from_dict({'type': {4: 'Second Product',
  5: 'table',
  6: 'First Product',
  7: 'chair',
  8: 'Second Product',
  9: 'desk',
  10: 'First Product',
  11: 'chair'},
 'id': {4: 'cust1',
  5: 'cust1',
  6: 'cust1',
  7: 'cust1',
  8: 'cust2',
  9: 'cust2',
  10: 'cust2',
  11: 'cust2'}})

转换代码

# 按客户分组,将每组内的产品名与对应值配对
result = df.groupby('id').apply(lambda x: pd.Series(dict(zip(x['type'].iloc[::2], x['type'].iloc[1::2])))).reset_index()

# 重命名id列为cust,匹配目标格式
result.rename(columns={'id': 'cust'}, inplace=True)

代码说明

  • 分组处理:通过groupby('id')将同一客户的行归为一组,确保每个客户的产品名和对应值在同一组内处理
  • 键值配对:每组内的type列按顺序是「产品名→对应值→产品名→对应值」的结构,用iloc[::2]提取所有产品名作为键,iloc[1::2]提取对应位置的值,通过zip配对成字典后转为Series
  • 格式调整:reset_index()将分组的客户id转为列,最后重命名列名匹配需求

该方案自动适配任意数量的产品类型,若某客户缺少对应产品,对应列会自动填充NaN。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:35:02