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

如何用Python/Pandas将横向多组DoB/Name数据转置为多行?

用Pandas实现横向多组数据转纵向结构

直接用Pandas的wide_to_long函数就能搞定,分两种常见情况给你实操代码:

情况1:列名带分组编号(比如DoB_1、Name_1)

如果你的原始表格列名是Company ID加上带编号的DoB_n、Name_n(比如DoB_1、Name_1到DoB_8、Name_8,对应最多8组实体),直接按以下步骤来:

import pandas as pd

# 读取你的数据,实际换成pd.read_csv("你的文件路径.csv")
df = pd.DataFrame({
    'Company ID': ['C001', 'C002', 'C003'],
    'DoB_1': ['1990-01-01', '1985-05-10', None],
    'Name_1': ['Alice', 'Bob', None],
    'DoB_2': ['1992-03-15', None, None],
    'Name_2': ['Charlie', None, None]
})

# 执行转换
result = pd.wide_to_long(
    df,
    stubnames=['DoB', 'Name'],  # 列名的前缀部分
    i='Company ID',  # 作为主键的列
    j='group',  # 生成的分组编号列名
    sep='_'  # 前缀和编号的分隔符
).reset_index()

# 过滤掉空的实体行(原表格中没有对应数据的行)
result = result.dropna(subset=['DoB', 'Name'], how='all')

# 不需要分组编号的话就删掉这列
result = result.drop(columns='group')

# 输出结果或者保存到文件
print(result)
# result.to_csv("转换后的数据.csv", index=False)

情况2:列名不带编号(纯重复的DoB、Name)

如果你的原始表格列名是Company ID之后跟着重复的DoB、Name(没有编号),先给列名加上编号再转换:

import pandas as pd

# 读取数据
df = pd.read_csv("你的文件路径.csv")

# 给重复的DoB、Name列添加分组编号
cols = []
dob_idx = 1
name_idx = 1
for col in df.columns:
    if col == 'DoB':
        cols.append(f'DoB_{dob_idx}')
        dob_idx += 1
    elif col == 'Name':
        cols.append(f'Name_{name_idx}')
        name_idx += 1
    else:
        cols.append(col)
df.columns = cols

# 后续步骤和情况1完全一致
result = pd.wide_to_long(
    df,
    stubnames=['DoB', 'Name'],
    i='Company ID',
    j='group',
    sep='_'
).reset_index().dropna(subset=['DoB', 'Name'], how='all').drop(columns='group')

result.to_csv("转换后的数据.csv", index=False)

非代码方案(一次性操作更省事)

不想写代码的话,用Excel的Power Query就能搞定:

  • 选中原始数据区域,点击「数据」选项卡→「从表格/区域」
  • 在Power Query编辑器里,选中所有DoB和Name列,点击「转换」选项卡→「逆透视列」→「逆透视其他列」
  • 如果是无编号的重复列,把生成的「属性」列拆分(按重复规律),再整理成DoB和Name两列,最后点击「关闭并上载」就能得到纵向数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 05:10:40