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

如何重置pandas.core.Series索引,实现连续一级索引?

问题

我的DataFrame包含字符串列code_desc,其中包含代码,通过以下代码生成pandas.core.Series:

d = {'R438': 'The person is a Ninja',
     'R727': 'The person is a Pirate',
     # 其他键值对省略
     }

pat = r'\b(%s)\b' % '|'.join(d)
codes = df['codes_desc'].str.extractall(pat)[0]
df['reference'] = codes.map(d).groupby(level=0).agg(', '.join)

当前codes的输出如下:

matches
0  0        R438
   1        R727
   2        R662
1  0        R438
   1        R727
   2        R662
2  0        R438
   1        R727
   2        R662
3  0        R438
   1        R727
   2        R662
4  0        R438
   1        R727
   2        R662
5  0        R438
   1        R727
   2        R662
0  0        R227
   1        R438
   2        R727
5  0        R223
4  0        R223

我尝试使用.reset_index(level=1, inplace=True, drop=True)未达到预期效果,期望输出为:

matches
0  0        R438
   1        R727
   2        R662
1  0        R438
   1        R727
   2        R662
2  0        R438
   1        R727
   2        R662
3  0        R438
   1        R727
   2        R662
4  0        R438
   1        R727
   2        R662
5  0        R438
   1        R727
   2        R662
6  0        R227
   1        R438
   2        R727
7  0        R223
8  0        R223
解决方案

要实现连续的主索引,需要重新生成唯一的主索引替代原Series中重复的索引值,具体步骤如下:

  1. 将原Series转换为DataFrame并重置所有索引,把多重索引转为普通列:
codes_df = codes.reset_index()
  1. 为每个重复的原主索引(level_0列)分配唯一的新主索引ID:
codes_df['new_level0'] = codes_df.groupby('level_0').ngroup()
  1. 重新设置多重索引,用新生成的new_level0作为主索引,保留原匹配序号level_1作为二级索引,最后恢复为Series格式:
codes_new = codes_df.set_index(['new_level0', 'level_1'])[0].rename('matches')

执行以上代码后,codes_new就会得到你期望的连续主索引结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:45:22