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

如何将pandas中extractall生成的多级索引结果展平合并?

解决pandas extractall结果展平合并问题

针对你遇到的str.extractall()返回多级索引后需要展平合并的需求,可以通过分组聚合+空值填充的方式快速实现目标:

完整解决方案代码

import pandas as pd
import numpy as np

df = pd.DataFrame([["cat 123"], ["hat dog 36776"], ["dog 345"], ["fish 456890 hat"]], columns=['A'])
pat = r'(?:(?P<Mammal>(?:cat)|(?:dog))|(?P<Fish>(?:fish))|(?P<Hat>(?:hat)))'

# 执行extractall并处理结果
df_ea = df['A'].str.extractall(pat)
# 按原行索引分组,取每个列的非空值(max会自动忽略NaN),再将NaN替换为空字符串
result = df_ea.groupby(level=0).max().fillna('')

print(result)

执行结果

Mammal  Fish  Hat
0    cat           
1    dog        hat
2    dog           
3         fish  hat

原理说明

  1. str.extractall()返回的多级索引中,level=0对应原DataFrame的行索引,level=1是匹配项序号
  2. groupby(level=0)按原行分组,将同一行的多个匹配项聚合到一组
  3. max()聚合函数会自动忽略NaN值,保留每个列在分组内的唯一非空值(你的正则规则保证每个匹配项只会填充一个列)
  4. fillna('')将剩余的NaN替换为空字符串,完全匹配期望格式

替代方案(适配多值场景)

如果同一列可能存在多个匹配值需要拼接,可使用自定义聚合函数:

result = df_ea.replace(np.nan, '').groupby(level=0).agg(lambda x: ' '.join(x[x != '']))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:05:29