Python pandas:如何在行满足条件时重置DataFrame索引?
解决方法
你需要先按'aa'出现的位置划分分组,再给每个分组单独生成从0开始的索引,具体代码如下:
import pandas as pd # 构造你的DataFrame data = { 'name': ['john', 'popp', 'lily', 'fete', 'bruh', 'kiku', 'kiku', 'kiku'], 'loc': ['aa', 'bb', 'cc', 'aa', 'gg', 'uu', 'aa', 'ur'] } df = pd.DataFrame(data) # 1. 创建分组标识:每次遇到'aa'就开启一个新分组 df['group'] = (df['loc'] == 'aa').cumsum() # 2. 对每个分组生成从0开始的索引 df.index = df.groupby('group').cumcount() # 3. 删掉临时的group列(可选) df = df.drop('group', axis=1) print(df)
运行后会得到你期望的结果:
| name | loc | |
|---|---|---|
| 0 | john | aa |
| 1 | popp | bb |
| 2 | lily | cc |
| 0 | fete | aa |
| 1 | bruh | gg |
| 2 | kiku | uu |
| 0 | kiku | aa |
| 1 | kiku | ur |
代码说明
(df['loc'] == 'aa').cumsum():每遇到一行loc值为'aa'时,累加计数加1,这样同一个"aa块"内的所有行会拥有相同的分组标识。df.groupby('group').cumcount():针对每个分组,从0开始为行计数,刚好实现每次遇到'aa'就重置索引的需求。
你之前的代码只是全局重置了一次索引,没有按'aa'的位置做分组处理,所以无法达到预期效果。
内容的提问来源于stack exchange,提问作者anonymous
相关产品推荐
相关产品推荐

