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

Pandas如何按_id分组拆分指定列生成未展开Series并保留关联列

Pandas按分隔符拆分列并关联原字段、分组生成未展开Series的实现方法

基础准备:构造示例数据

先复现测试数据集:

import pandas as pd

df = pd.DataFrame({
    'ixd': [0],
    '_id': ['abc123'],
    'systemA': ['1703.0|1144.0'],
    'systemB': ['2172.0|735.0']
})

拆分单列后保留关联原有列的方法

不需要拆分后额外做关联操作,只要拆分时关闭展开参数,拆分结果会和原表行索引天然对齐,所有原有列自动关联:

# 拆分systemA列,expand=False表示不拆分为多列,结果为存储列表的Series
df['systemA_cut'] = df['systemA'].str.split('|', expand=False)

执行后新列和原表所有行一一对应,ixd、_id、systemB等原有字段不会丢失,不需要额外做merge/join操作。

按_id分组拆分两列、生成未展开Series的方法

直接按_id分组后对目标列做拆分即可,全程保持expand=False就不会展开为多行/多列,最终得到以_id为索引的拆分结果:

# 按_id分组,对systemA、systemB同时做拆分,保留未展开的列表结构
split_series_result = df.groupby('_id')[['systemA', 'systemB']].apply(
    lambda group: group.apply(
        lambda col: col.str.split('|', expand=False).iloc[0]
    )
)

输出结构说明

执行后得到的结果索引为分组字段_id,每个分组下的systemA、systemB均为拆分后的列表,完全符合未展开的要求:

systemA                 systemB
_id                                     
abc123  [1703.0, 1144.0]  [2172.0, 735.0]

如果需要单独提取某一列的拆分Series,直接按列名索引即可,例如split_series_result['systemA']就是按_id分组、拆分后未展开的systemA列Series。

补充说明

如果同一个_id对应多条原始数据,只需要调整apply内的聚合逻辑即可,比如将同组所有拆分结果合并、去重,不需要改动整体拆分逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:15:31