如何按连续重复值及条件筛选Pandas DataFrame?
解决方法
可以通过标记连续重复组、计算组长度,再结合数值筛选来实现,代码如下:
import pandas as pd df = pd.DataFrame({'a':[1, 1, 1, 2, 1, 3, 1, 1, 4, 4, 5, 5, 5, 6, 6, 3]}) # 标记连续重复组的起始点,生成组ID group_ids = df['a'].ne(df['a'].shift()).cumsum() # 计算每个组的长度,映射到每一行 group_sizes = group_ids.map(group_ids.value_counts()) # 筛选条件:组长度≥2 且 数值≤5 result = df[(group_sizes >= 2) & (df['a'] <= 5)] print(result)
代码解释
df['a'].ne(df['a'].shift()):比较当前行与上一行的a值是否不同,返回布尔序列,True表示新组的开始。cumsum():将布尔序列累加,生成唯一的组ID,同一连续重复组的行拥有相同ID。group_ids.value_counts():统计每个组的行数(即连续重复的次数),再用map将组长度对应到每一行。- 最后通过布尔索引筛选出组长度≥2(连续重复)且数值≤5的行,得到预期结果。
运行后输出:
a 0 1 1 1 2 1 6 1 7 1 8 4 9 4 10 5 11 5 12 5
内容的提问来源于stack exchange,提问作者skywave1980
相关产品推荐
相关产品推荐

