Pandas如何拆分逗号分隔多值列 匹配对应ID创建新df
Pandas拆分逗号分隔列并匹配对应ID的实现方法
你可以直接使用pandas内置方法完成需求,无需安装第三方依赖,具体实现如下:
- 首先构造示例原始数据(你可以替换成自己的真实df):
import pandas as pd # 原始示例数据 df = pd.DataFrame({ 'A': ['a', 'b', 'c'], 'B': ['1,3,5', '2,5,7', '8,13,18'], 'C': ['id_1', 'id_2', 'id_3'] })
- 核心处理逻辑:先拆分B列的逗号分隔值为列表,再将列表展开为多行,自动匹配对应C列的ID,最后整理成目标列结构:
new_df = df.assign( val_col = df['B'].str.split(',') # 按逗号拆分B列为值列表 ).explode( 'val_col' # 将列表值展开为独立行,索引自动和原行对齐 ).rename( columns={'C': 'id_col'} # 原C列重命名为目标列名id_col )[['id_col', 'val_col']] # 仅保留需要的两列
- 如果需要
val_col为数值格式而非字符串,补充一行类型转换即可:
new_df['val_col'] = new_df['val_col'].astype(int)
执行后打印new_df即可得到你需要的目标结构:
| id_col | val_col | |
|---|---|---|
| 0 | id_1 | 1 |
| 0 | id_1 | 3 |
| 0 | id_1 | 5 |
| 1 | id_2 | 2 |
| 1 | id_2 | 5 |
| 1 | id_2 | 7 |
| 2 | id_3 | 8 |
| 2 | id_3 | 13 |
| 2 | id_3 | 18 |
兼容说明:如果你使用的pandas版本低于1.3.0,可以使用如下写法,效果完全一致:
new_df = df[['C']].rename(columns={'C':'id_col'}).assign( val_col=df['B'].str.split(',') ).explode('val_col')
内容的提问来源于stack exchange,提问作者Giskard
相关产品推荐
相关产品推荐

