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

如何将Python DataFrame行拆分为一对一映射格式?

解决Python DataFrame行的一对一映射拆分问题

你需要将DataFrame中包含多行值的列按顺序拆分成一对一的行,同时保留其他列的单个值。单独使用explode()会生成笛卡尔积而非对应映射,以下是可行的解决方案:

步骤1:构造示例数据

import pandas as pd

# 模拟你的原始DataFrame
df = pd.DataFrame({
    'A': ['valueA1', 'valueA2'],
    'B': ['valueB1 <br /> valueB2 <br /> valueB3', 'valueB4'],
    'C': ['valueC1 <br /> valueC2 <br /> valueC3', 'valueC4']
})

步骤2:将多行列分割为列表

先把用<br />分隔的字符串拆分成元素列表,同时清理多余空格:

# 分割B、C列,生成元素列表
df['B'] = df['B'].str.split(' <br /> ').apply(lambda x: [item.strip() for item in x])
df['C'] = df['C'].str.split(' <br /> ').apply(lambda x: [item.strip() for item in x])

步骤3:按对应位置拆分并展开

这里提供两种实现方式:

方式一:使用apply+pd.DataFrame展开

直接对每行生成对应长度的子DataFrame,再合并:

# 遍历每行,生成对应拆分后的子DataFrame并合并
result = df.apply(
    lambda row: pd.DataFrame({
        'A': [row['A']] * len(row['B']),
        'B': row['B'],
        'C': row['C']
    }),
    axis=1
).concat().reset_index(drop=True)

方式二:打包列后explode

先把需要对应拆分的列打包成元组列表,再拆分:

# 将B、C列的对应元素打包成元组列表
df['BC_pair'] = df.apply(lambda row: list(zip(row['B'], row['C'])), axis=1)

# 展开打包后的列
result = df.explode('BC_pair')

# 将元组拆分为B、C列
result[['B', 'C']] = pd.DataFrame(result['BC_pair'].tolist(), index=result.index)

# 移除临时列
result = result.drop('BC_pair', axis=1).reset_index(drop=True)

最终结果

执行后result的输出为:

ABC
valueA1valueB1valueC1
valueA1valueB2valueC2
valueA1valueB3valueC3
valueA2valueB4valueC4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:45:37