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

如何拆分DataFrame并将处理后的内容重新合并

问题

我有一个如下所示的DataFrame,其中单元格内容以斜杠分隔。我希望拆分这些单元格以分配其他信息,拆分时需保持原行的关联关系,示例如下:

# 当前DataFrame
newcolumn      code        name           place
NA/NA          121/102      John/James    GBR/GBR
NA/NA          100/103      Harry/Peter   GBR/GBR
NA/NA          113/111      Will/Jamie   GBR/GBR
NA/NA          109/112      Brian/Steve    GBR/GBR

期望拆分后的DataFrame为:

newcolumn  code     name    place
    NA        121      John    GBR
    NA        102      James   GBR
    NA        100      Harry   GBR
    NA        103      Peter   GBR
    NA        113      Will    GBR
    NA        111      Jamie   GBR
    NA        109      Brian   GBR
    NA        112      Steve   GBR

填充newcolumn列后,我需要将相邻两行(第1与2行、第3与4行等)重新合并(或许可以用循环实现)。

解决方案

步骤1:拆分单元格并展开行

用Pandas的str.split配合explode就能快速完成拆分,同时保留原行的关联关系:

import pandas as pd

# 构造原始数据
data = {
    'newcolumn': ['NA/NA', 'NA/NA', 'NA/NA', 'NA/NA'],
    'code': ['121/102', '100/103', '113/111', '109/112'],
    'name': ['John/James', 'Harry/Peter', 'Will/Jamie', 'Brian/Steve'],
    'place': ['GBR/GBR', 'GBR/GBR', 'GBR/GBR', 'GBR/GBR']
}
df = pd.DataFrame(data)

# 对所有列按斜杠拆分,转成列表后展开
for col in df.columns:
    df[col] = df[col].str.split('/')
df = df.explode(df.columns.tolist()).reset_index(drop=True)

# 可选:将code列转为整数类型
df['code'] = df['code'].astype(int)

执行后就能得到你期望的拆分结果。

步骤2:合并相邻两行

可以通过分组的方式实现每两行合并,这里提供两种常见的合并逻辑:

逻辑1:将两行信息拆分到不同列

# 每两行分为一组
df['group'] = df.index // 2

# 合并组内两行,用后缀区分原行与相邻行的字段
merged_df = df.groupby('group').agg(
    newcolumn_1=('newcolumn', lambda x: x.iloc[0]),
    code_1=('code', lambda x: x.iloc[0]),
    name_1=('name', lambda x: x.iloc[0]),
    place_1=('place', lambda x: x.iloc[0]),
    newcolumn_2=('newcolumn', lambda x: x.iloc[1]),
    code_2=('code', lambda x: x.iloc[1]),
    name_2=('name', lambda x: x.iloc[1]),
    place_2=('place', lambda x: x.iloc[1])
).reset_index(drop=True)

逻辑2:将两行同名字段拼接

# 每两行分为一组
df['group'] = df.index // 2

# 将同名字段按指定格式拼接
merged_df = df.groupby('group').agg(
    code=('code', '/'.join),
    name=('name', ' & '.join),
    place=('place', lambda x: x.iloc[0]),
    newcolumn=('newcolumn', lambda x: x.iloc[0])
).reset_index(drop=True)

你可以根据实际需求调整agg里的函数逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 16:45:00