如何重置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中重复的索引值,具体步骤如下:
- 将原Series转换为DataFrame并重置所有索引,把多重索引转为普通列:
codes_df = codes.reset_index()
- 为每个重复的原主索引(
level_0列)分配唯一的新主索引ID:
codes_df['new_level0'] = codes_df.groupby('level_0').ngroup()
- 重新设置多重索引,用新生成的
new_level0作为主索引,保留原匹配序号level_1作为二级索引,最后恢复为Series格式:
codes_new = codes_df.set_index(['new_level0', 'level_1'])[0].rename('matches')
执行以上代码后,codes_new就会得到你期望的连续主索引结构。
内容的提问来源于stack exchange,提问作者Ash
相关产品推荐
相关产品推荐

