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

如何在Pandas中保留连续布尔值组的首个True及孤立True

问题:保留孤立True与连续True组的首个True

需求说明:处理布尔型Series,需保留两个False之间的孤立True,同时仅保留连续True组中的首个True,其余连续True转为False。

原始数据

Date
2023-07-10 00:00:00+00:00    False
2023-07-11 00:00:00+00:00    False
2023-07-12 00:00:00+00:00    False
2023-07-13 00:00:00+00:00    False
2023-07-14 00:00:00+00:00    False
2023-07-15 00:00:00+00:00    False
2023-07-16 00:00:00+00:00    False
2023-07-17 00:00:00+00:00    False
2023-07-18 00:00:00+00:00    False
2023-07-19 00:00:00+00:00    False
2023-07-20 00:00:00+00:00    False
2023-07-21 00:00:00+00:00     True
2023-07-22 00:00:00+00:00    False
2023-07-23 00:00:00+00:00    False
2023-07-24 00:00:00+00:00    False
2023-07-25 00:00:00+00:00    False
2023-07-26 00:00:00+00:00    False
2023-07-27 00:00:00+00:00    False
2023-07-28 00:00:00+00:00    False
2023-07-29 00:00:00+00:00     True
2023-07-30 00:00:00+00:00     True
2023-07-31 00:00:00+00:00    False
2023-08-01 00:00:00+00:00    False
2023-08-02 00:00:00+00:00    False
2023-08-03 00:00:00+00:00    False
2023-08-04 00:00:00+00:00    False
2023-08-05 00:00:00+00:00     True
2023-08-06 00:00:00+00:00     True
2023-08-07 00:00:00+00:00     True
2023-08-08 00:00:00+00:00     True
Freq: D, Name: Close, dtype: bool

期望结果

Date
2023-07-10 00:00:00+00:00    False
2023-07-11 00:00:00+00:00    False
2023-07-12 00:00:00+00:00    False
2023-07-13 00:00:00+00:00    False
2023-07-14 00:00:00+00:00    False
2023-07-15 00:00:00+00:00    False
2023-07-16 00:00:00+00:00    False
2023-07-17 00:00:00+00:00    False
2023-07-18 00:00:00+00:00    False
2023-07-19 00:00:00+00:00    False
2023-07-20 00:00:00+00:00    False
2023-07-21 00:00:00+00:00     True
2023-07-22 00:00:00+00:00    False
2023-07-23 00:00:00+00:00    False
2023-07-24 00:00:00+00:00    False
2023-07-25 00:00:00+00:00    False
2023-07-26 00:00:00+00:00    False
2023-07-27 00:00:00+00:00    False
2023-07-28 00:00:00+00:00    False
2023-07-29 00:00:00+00:00     True
2023-07-30 00:00:00+00:00    False
2023-07-31 00:00:00+00:00    False
2023-08-01 00:00:00+00:00    False
2023-08-02 00:00:00+00:00    False
2023-08-03 00:00:00+00:00    False
2023-08-04 00:00:00+00:00    False
2023-08-05 00:00:00+00:00     True
2023-08-06 00:00:00+00:00    False
2023-08-07 00:00:00+00:00    False
2023-08-08 00:00:00+00:00    False
Freq: D, Name: Close, dtype: bool

单行代码解决方案

假设你的布尔Series名为s,可以使用以下代码实现需求:

s = s & ~s.shift(fill_value=False)

代码解释

  • s.shift(fill_value=False):将原Series向下偏移一位,第一个位置用False填充,每个位置的值对应原Series中上一个位置的值。
  • ~s.shift(fill_value=False):对偏移后的Series取反,此时原Series里连续True的非首个位置会变成False(因为上一个位置是True,取反后为False),孤立True和连续True的首个位置则为True(上一个位置是False,取反后为True)。
  • s & ~s.shift(...):将原Series与取反后的Series做逻辑与运算,只有当原位置是True且上一个位置是False时,结果才为True,刚好满足保留孤立True和连续True组首个True的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 17:45:02