如何将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
原理说明
str.extractall()返回的多级索引中,level=0对应原DataFrame的行索引,level=1是匹配项序号groupby(level=0)按原行分组,将同一行的多个匹配项聚合到一组max()聚合函数会自动忽略NaN值,保留每个列在分组内的唯一非空值(你的正则规则保证每个匹配项只会填充一个列)fillna('')将剩余的NaN替换为空字符串,完全匹配期望格式
替代方案(适配多值场景)
如果同一列可能存在多个匹配值需要拼接,可使用自定义聚合函数:
result = df_ea.replace(np.nan, '').groupby(level=0).agg(lambda x: ' '.join(x[x != '']))
内容的提问来源于stack exchange,提问作者qwertytam
相关产品推荐
相关产品推荐

