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

如何从Pandas DataFrame获取bcc列从False切换为True的日期列表

问题:如何从Pandas DataFrame中获取布尔列从False切换为True的日期列表?

我有一个以日期为索引的Pandas DataFrame,结构如下(共577行×7列):

DateHighLowOpenCloseVolumeAdj Closebcc
2018-01-022695.8898932682.3601072683.7299802695.81005933672500002695.810059False
2018-01-032714.3701172697.7700202697.8500982713.06005935386600002713.060059False
2018-01-042729.2900392719.0700682719.3100592723.98999036952600002723.989990False
2018-01-052743.4499512727.9199222731.3300782743.14990232366200002743.149902False
2018-01-082748.5100102737.6000982742.6699222747.70996132426500002747.709961True
........................
2020-04-172879.2199712830.8798832842.4299322874.56005957921400002874.560059False

我想要获取bcc列中布尔值从False切换为True的日期列表,比如示例中的2018-01-08就是符合条件的日期。请问该如何实现?


解决方案

要找出bcc列从False变为True的日期,我们可以利用Pandas的移位或差值计算函数来对比相邻行的值,这里提供两种实用方法:

方法一:基础移位对比法

直接通过shift(1)获取bcc列的前一行值,然后筛选出当前行是True且前一行是False的行:

# 构建筛选条件:当前行bcc为True,且前一行bcc为False
mask = (df['bcc'] == True) & (df['bcc'].shift(1) == False)
# 提取符合条件的日期并转为列表
switch_dates = df[mask].index.tolist()

方法二:使用diff()简化逻辑

布尔值在Pandas中会被自动转换为1(True)和0(False),所以从False到True的变化对应的差值正好是1,用diff()函数可以快速筛选:

# 计算相邻行的差值,筛选差值为1的行(即从False→True的变化)
mask = df['bcc'].diff() == 1
switch_dates = df[mask].index.tolist()

补充说明

  • 两种方法都能得到目标日期列表,diff()的写法更简洁高效。
  • 如果DataFrame的第一行bcc就是True,两种方法都会自动忽略该行——因为不存在“从False切换”的前提,shift(1)会返回NaN,diff()的第一个值也是NaN,都不会被筛选出来,符合我们的需求。

用你提供的样本数据运行上述代码,会得到结果:

['2018-01-08']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 11:17:55