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

在Pandas中提取正则匹配结果并将索引转为普通列

问题场景

初始DataFrame结构如下:

column0                              column2
0         0 SomethingSomeData1MixedWithSomeData2
1 something            SomeMoreDataWithSomeData3
2  whatever                            SomeData4

使用df['column2'].str.extractall(r'(SomeData\d)')提取正则匹配内容后,得到多层索引结果:

data
  match
0     0 SomeData1
0     1 SomeData2
1     0 SomeData3
2     0 SomeData4

需要将其转换为以下两种目标格式之一:

形式一:宽表格式

data0     data1
0 SomeData1 SomeData2
1 SomeData3       NaN
2 SomeData4       NaN

形式二:列表格式

data
0 [SomeData1, SomeData2]
1            [SomeData3]
2            [SomeData4]

解决方案

实现形式一(宽表)

通过unstack将match层级转为列,再整理列名:

# 先执行提取操作
extracted_df = df['column2'].str.extractall(r'(SomeData\d)')
# 将match层级转为列
form1 = extracted_df.unstack(level='match')
# 清理列名并重置索引
form1.columns = [f'data{i}' for i in form1.columns.get_level_values(1)]
form1 = form1.reset_index(drop=True)

实现形式二(列表)

提供两种高效实现方式:

  1. 基于提取结果分组聚合:
form2 = extracted_df.groupby(level=0)['data'].apply(list).reset_index(name='data')
  1. 直接用str.findall一步生成(无需先调用extractall):
df['data'] = df['column2'].str.findall(r'(SomeData\d)')
# 若仅需结果列,可单独提取
form2 = df[['data']].copy()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 16:27:04