Skip to main content
 首页 » 编程设计

python之在 pandas 数据框中的 block 中查找第一个 'True' 值

2025年05月04日23mayingbao

我有一个数据框,其中一列仅包含 block 中的 True 或 False 值。例如:

df =    
            b 
  0     False 
  1      True 
  2      True 
  3     False 
  4      True 
  5      True 
  6      True 
  7      True 
  8     False 
  9     False 
 10     False 
 11     False 
 12     False 
 13      True 
 14      True 
 15      True 

我需要用 True 找到 block 的开头:

>> find_first_true(df) 
>> array([1, 4, 13]) 

有什么优雅的解决方案吗?

编辑

感谢您提出的解决方案。我想知道,从我找到的索引开始提取一定长度的 block 的最简单方法是什么?

例如,我需要在索引之前获取长度为 4 的 block (行数)。所以,如果我的索引(之前找到)

index = array([1, 4, 13]) 

然后我需要积木:

[df.loc[0:4], df.loc[9:13]] 

或

            b 
  0     False 
  1      True 
  2      True 
  3     False 
  4      True 
  9     False 
 10     False 
 11     False 
 12     False 
 13      True 

我正在遍历索引,但想知道更多 pandasian 解决方案

请您参考如下方法:

In [2]: df = pd.read_clipboard() 
In [3]: df 
Out[3]: 
        b 
0   False 
1    True 
2    True 
3   False 
4    True 
5    True 
6    True 
7    True 
8   False 
9   False 
10  False 
11  False 
12  False 
13   True 
14   True 
15   True 
In [11]: np.where(((df.b != df.b.shift(1)) & df.b).values)[0] 
Out[11]: array([ 1,  4, 13], dtype=int64)