如何用Pandas提取连续重复3次的索引对应的DataFrame
解决方案
要提取DataFrame中连续重复至少3次的索引对应的连续行,可以通过以下步骤用Pandas实现:
1. 构造示例数据
先还原你给出的示例DataFrame:
import pandas as pd data = { 'index': [1, 2, 2, 2, 3, 2, 5, 2], 'var1': ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'f'] } df = pd.DataFrame(data).set_index('index')
2. 标记连续索引组并计算组大小
我们需要先识别出连续相同索引的分组,再计算每个分组包含的行数:
# 生成连续组的唯一标识:当前索引和前一行不同时,组号递增 group_ids = (df.index != df.index.shift()).cumsum() # 计算每个组的行数,并将结果映射到原DataFrame的每一行 group_sizes = df.index.to_series().groupby(group_ids).transform('size')
3. 筛选符合条件的行
筛选出所在组行数≥3的行,就是连续重复至少3次的索引对应的连续数据:
result = df[group_sizes >= 3] print(result)
运行后输出结果:
var1 index 2 b 2 c 2 d
逻辑说明
group_ids通过对比当前行索引与前一行索引,将连续相同的索引归为同一个组,每个组有唯一编号。group_sizes用transform方法把每个组的大小赋值给组内的每一行,这样我们能直接通过行级的判断筛选目标数据。- 最后通过
group_sizes >=3筛选出所有属于连续重复3次及以上的索引组的行。
内容的提问来源于stack exchange,提问作者eymentakak
相关产品推荐
相关产品推荐

