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

如何基于含多值列的DataFrame生成拆分后的新DataFrame

Pandas DataFrame 多列拆分并生成对应新行解决方案

问题场景

现有维度为(5000, 6)的DataFrame df1,需按以下规则拆分生成新行:

  • A列按逗号拆分,每个拆分后的值对应一行
  • C列按换行符拆分,每个拆分后的值对应一行
  • B、D、E、F列直接复制原行对应值
  • A列与C列拆分后的多值数量可能不一致(部分行A仅含1个值,部分行两者数量一致)

代码实现

import pandas as pd

def process_row(row):
    # 拆分A列,去除元素前后空格
    a_split = [item.strip() for item in row['A'].split(',')]
    # 拆分C列,过滤空字符串并去除元素前后空格
    c_split = [item.strip() for item in row['C'].split('\n') if item.strip()]
    
    len_a, len_c = len(a_split), len(c_split)
    
    # 处理列长度不一致的情况
    if len_a == 1 and len_c > 1:
        a_split = a_split * len_c
    elif len_c == 1 and len_a > 1:
        c_split = c_split * len_a
    # 若两者长度均大于1且不等,默认截断较长列表至较短长度(可根据需求调整逻辑)
    else:
        min_len = min(len_a, len_c)
        a_split = a_split[:min_len]
        c_split = c_split[:min_len]
    
    # 构建临时DataFrame
    temp_df = pd.DataFrame({
        'A': a_split,
        'C': c_split
    })
    # 复制其他列的值
    for col in ['B', 'D', 'E', 'F']:
        temp_df[col] = row[col]
    
    return temp_df

# 应用到原DataFrame并合并结果
result_df = pd.concat([process_row(row) for _, row in df1.iterrows()], ignore_index=True)

代码说明

  1. 列拆分处理:对A列按逗号拆分,对C列按换行符拆分,同时清理元素前后空格及空字符串(避免原数据末尾换行导致无效空值)
  2. 长度对齐逻辑:
    • 若其中一列仅含1个值,将该值重复至与另一列拆分后的长度一致
    • 若两列拆分后长度均大于1且不等,默认截断较长列表至较短列表的长度(可根据实际业务需求调整,例如抛出警告或填充缺失值)
  3. 结果合并:通过pd.concat将每一行处理后的临时DataFrame合并,生成最终拆分后的DataFrame

测试示例

# 构造测试数据
test_data = {
    'A': ['A-0000-ALEX,A-00030-PAUL', 'A-0001-JOHN', 'A-0002-MARY,A-0003-TOM'],
    'B': [1, 2, 3],
    'C': ['1112-PPAI 12.00: First Name\n4554-ALGF 09:00 Groceries\n', '6667-XYZ 14:00 Dinner\n', '7778-ABC 10:00 Work\n8889-DEF 15:00 Shopping'],
    'D': ['d1', 'd2', 'd3'],
    'E': ['e1', 'e2', 'e3'],
    'F': ['f1', 'f2', 'f3']
}
df1 = pd.DataFrame(test_data)

# 生成结果
result_df = pd.concat([process_row(row) for _, row in df1.iterrows()], ignore_index=True)
print(result_df)

运行后输出的结果符合需求:

A  B                              C   D   E   F
0  A-0000-ALEX  1  1112-PPAI 12.00: First Name  d1  e1  f1
1 A-00030-PAUL  1    4554-ALGF 09:00 Groceries  d1  e1  f1
2  A-0001-JOHN  2        6667-XYZ 14:00 Dinner  d2  e2  f2
3  A-0002-MARY  3          7778-ABC 10:00 Work  d3  e3  f3
4   A-0003-TOM  3       8889-DEF 15:00 Shopping  d3  e3  f3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:06:25